Dengan GNU du
(yaitu pada Linux yang tidak tertanam atau Cygwin), Anda dapat menggunakan --exclude
opsi untuk mengecualikan file yang tidak ingin Anda cocokkan.
du -s --exclude='*.html' /var/foo
Jika Anda ingin mencocokkan *.pdf
file secara positif , Anda harus menggunakan beberapa metode lain untuk membuat daftar file, dan du
setidaknya akan menampilkan satu baris output per argumen, ditambah total besar dengan opsi -c
. Anda dapat menelepon tail
untuk menghapus semua kecuali baris terakhir, atau sed untuk menghapus kata "total" juga. Untuk menghitung file dalam satu direktori itu, gunakan wildcard di shell.
du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'
Jika Anda perlu menelusuri file dalam subdirektori juga, gunakan find
, atau gunakan **/
pola jika shell Anda mendukungnya. Untuk **/
, dalam bash, jalankan pertama shopt -s extglob
, dan perhatikan bahwa versi bash hingga 4.2 akan melintasi tautan simbolik ke direktori; di zsh, ini berfungsi di luar kotak.
du -sc /var/foo/**/*.pdf | tail -n1
Komplikasi tambahan dengan versi find adalah bahwa jika ada terlalu banyak file, find
akan berjalan du
lebih dari sekali, untuk tetap di bawah batas panjang baris perintah. Dengan metode wildcard, Anda akan mendapatkan kesalahan jika itu terjadi ("batas panjang baris perintah terlampaui"). Kode berikut mengasumsikan bahwa Anda tidak memiliki nama file yang cocok yang berisi baris baru.
find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'
du -sh /foo/*.pdf
?