Menggunakan --exclude dengan perintah du

67

Ini mungkin sesuatu yang mendasar tetapi saya tidak dapat membuatnya bekerja. Saya mencoba menggunakan DU untuk mendapatkan ukuran total file dikurangi direktori tertentu. Saya perlu mengecualikan satu direktori spesifik yang dipanggil uploadstetapi tidak setiap direktori dipanggil uploads. Sebagai contoh, struktur file saya terlihat sedikit seperti ini:

/store
  /uploads
    /junk_to_ignore
    /more_junk_to_ignore
  /user_one
    /uploads
  /user_two

Saya dapat menjalankan perintah berikut:

du -ch --exclude=uploads* 

dan itu memberi saya ukuran file dikurangi semua direktori "unggahan". Namun, dalam mencoba mengecualikan direktori tertentu (dan semua sub-direktori) saya gagal. Saya sudah mencoba variasi:

du -ch --exclude=./uploads*
du -ch --exclude='/full/path/to/uploads/*'

tapi sepertinya tidak bisa memahaminya. Bagaimana cara mengecualikan direktori tertentu?

Akan
sumber
username: store$ du -ch --exclude=./uploadsbekerja (dengan dan tanpa wildcard) untuk saya, dari dalam direktori store. Apakah Anda menjalankan perintah itu dengan tepat dan dari dalam folder toko? Dan itu harus menjadi jalur relatif (yang menemukan melihat / mencetak), bukan absolut.
Kevin

Jawaban:

88

Anda hampir menemukannya :)

du -ch --exclude=./relative/path/to/uploads

Perhatikan tidak ada tanda bintang di bagian akhir. Tanda bintang berarti semua subdirektori di bawah "unggah" harus dihilangkan - tetapi bukan file secara langsung di direktori itu.

rozcietrzewiacz
sumber
4
Aneh ... sintaks dengan dot ( du -sb --exclude=./relative/path/to/uploads) tidak berfungsi untuk saya. Ini tidak:du -sb --exclude relative/path/to/uploads
Nux
4
@Nux mungkin rasa Anda du. Milik saya (OSX) bahkan tidak punya --exclude, malah -I maskharus "Abaikan file dan direktori yang cocok dengan topeng yang ditentukan." Dalam contoh kerja Anda, Anda juga menghilangkan =, membuat saya berpikir bahwa ini hanya versi Anda duyang sedikit duberbeda.
phatskat
Ya [OSX] [1] versi tampaknya versi yang lebih disederhanakan dari [Linux du] [2]. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/… [2]: linux.die.net/man/1/du
Nux
Bagaimana jika saya ingin mengecualikan beberapa direktori misalnya di sini tidak termasuk direktori junk_to_ignore dan mengunggah direktori?
Kiran K Telukunta
Mengapa ini bekerja dengan jalur relatif, tetapi bukan jalur absolut? Sangat aneh!
Nick
9

Untuk mengecualikan beberapa direktori, cukup lewati flag --exclude lagi.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude
Dave Neeley
sumber
1
Anda juga dapat menggunakandu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen
4

luar biasa untuk melewati sistem file virtual seperti itu

du -hsx --exclude=/{proc,sys,dev} /*
Ben Lutgens
sumber
1

Jika Anda harus menggunakan MacOS, Anda menginstal GNU Coreutils dengan perintah berikut.

brew install coreutils

Sebagian besar perintah yang diinstal oleh Coreutils diawali oleh g, karena mereka memiliki BSD namesake yang sudah diinstal pada macOS. Maka Anda dapat melakukan hal berikut.

gdu --exclude=Microsoft /Library/Fonts/
Lei Zhao
sumber