`Du` komutu ile sadece belirli bir uzantının toplam dosya boyutunu gösterme


11

Bir dizinde yüzlerce pdf dosyası ve html dosyası var. Ve pdf dosyalarının toplam boyutunu bilmek istiyorum.

Komut ile du -ch /var/footoplam dosya boyutunu görebiliyorum ama sadece son satır, toplam boyut gerekiyor.

Dizin yalnızca pdf dosyaları içeriyorsa -s, seçeneği kullanabilirim, ancak seçenek bu sefer kullanılamaz.

Belirli bir dosya türünün yalnızca toplam boyutunu nasıl alabilirim?


Gibi kullanamaz du -sh /foo/*.pdfmısın?
bagavadhar

2
du -ch /var/foo/*.pdf | tail -n 1
don_crissti

Yanıtlar:


10

GNU ile du(yani gömülü olmayan Linux veya Cygwin'de), --excludeeşleştirmek istemediğiniz dosyaları hariç tutmak için bu seçeneği kullanabilirsiniz .

du -s --exclude='*.html' /var/foo

*.pdfDosyaları olumlu bir şekilde eşleştirmek istiyorsanız, dosyaları listelemek için başka bir yöntem kullanmanız gerekir ve dubağımsız değişken başına en az bir çıktı satırı ve seçenekle birlikte genel bir toplam görüntüler -c. Sen diyebilirsin tailtüm ama son satırı kaldırmak veya sıra sözcüğü “toplam” kaldırmak için sed. Bir dizindeki dosyaları numaralandırmak için kabuktaki joker karakterleri kullanın.

du -sc /var/foo/*.pdf | tail -n1
du -sc /var/foo/*.pdf | sed -n '$s/\t.*//p'

Alt dizinlerdeki dosyaları da taramanız gerekiyorsa, kabuğunuz bunu destekliyorsa findbir **/desen kullanın veya kullanın . Çünkü **/, bash'da, ilk çalıştırma shopt -s extglobve 4.2'ye kadar bash sürümlerinin dizinlere sembolik bağları geçeceğini unutmayın; zsh, bu kutunun dışında çalışır.

du -sc /var/foo/**/*.pdf | tail -n1

Bulma sürümüyle ilgili ek bir sorun, çok fazla dosya varsa , komut satırı uzunluk sınırının altında tutmak için birden fazla findçalışacak olmasıdır du. Joker karakter yöntemiyle bu olursa bir hata alırsınız (“komut satırı uzunluk sınırı aşıldı”). Aşağıdaki kod, yeni satır içeren eşleşen bir dosya adınız olmadığını varsayar.

find /var/foo -name '*.pdf' -exec du -sc {} + |
awk '$2 == "total" {total += $1} END {print total}'

(muhtemelen uygulamada bir sorun değil, ancak hariç --exclude='*.html'/var/foo/dir.html/foo.pdf/var/foo
tutmalar

3

Kabuğun dosyaları genişletmesine izin verebilirsiniz:

$ mkdir foo
$ echo "abc" > foo/1.pdf
$ echo "abcd" > foo/2.pdf
$ echo "abcd" > foo/3.html
$ du -ch foo/*.pdf
4,0K    foo/1.pdf
4,0K    foo/2.pdf
8,0K    total

Ancak gördüğünüz gibi bu, dosya boyutlarını yeni oluşturulduğu gibi yaklaşık 1000 kez gösterir. Daha iyi bir seçenek seçeneği kullanmaktır -b:

$ du -cbh foo/*.pdf
4   foo/1.pdf
5   foo/2.pdf
9   total

Büyük dosya boyutları yine de insanlar tarafından okunabilir biçimde görüntülenir 173K.


duher dosyanın disk kullanımını gösterir (çoğu dosya sisteminde, dosya boyutu blok boyutunun bir sonraki katına yuvarlanır). Seçeneği ile -b, duher dosyanın boyutunu gösterir.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.