Memperoleh ukuran dengan du file saja

51

Bagaimana saya bisa mendapatkan ukuran semua file dan semua file di subdirektori menggunakan perintah du.

Saya mencoba perintah berikut untuk mendapatkan ukuran semua file (dan file dalam subdirektori)

find . -type f | du -a

Tapi ini juga mencetak ukuran folder. Bagaimana saya bisa mendapatkan daftar ukuran semua file dan file di subdirektori? Saya juga mencoba exec flagtetapi saya tidak yakin bagaimana mem-pipe output ke perintah lain setelah mengeksekusi hasil findke du.

Sistem operasinya adalah AIX 6.1 dengan shell ksh.

Shardul Upadhyay
sumber

Jawaban:

57

Saya biasanya menggunakan -executilitas. Seperti ini:

find . -type f -exec du -a {} +

Saya mencoba keduanya di bash dan ksh dengan GNU find. Saya tidak pernah mencoba AIX, tetapi saya yakin versi find Anda memiliki beberapa -execsintaks.

Cuplikan berikut mengurutkan daftar, terbesar pertama:

find . -type f -exec du -a {} + | sort -n -r | less
rahmu
sumber
3
Saya akan menjawab ini jika Anda tidak memiliki akses ke find -print0atau fitur GNU lainnya. Jika tersedia, mengganti \;dengan \+akan menghasilkan lebih sedikit pemanggilan dudan dengan demikian kinerja yang lebih baik.
jw013
Terima kasih, ini bekerja sangat baik terutama karena du menawarkan bendera untuk ukuran di unit yang berbeda.
Shardul Upadhyay
Saya tidak dapat menemukan informasi tentang +opsi tersebut. Apakah itu opsi untuk duatau untuk find? Dan mengapa itu menghasilkan lebih sedikit panggilan?
Amelio Vazquez-Reina
1
Ini adalah opsi standar find. Ini menentukan execperintah (dalam kasus kami du) hanya sekali, dengan semua hasil yang finddiberikan sebagai argumen berturut-turut untuk perintah.
rahmu
wtf, mengapa tidak ada perintah sepertidu -f --threshold=1G
Alexander Mills
16

Jika Anda memiliki utilitas GNU, coba

find . -type f -print0 | du --files0-from=-
jw013
sumber
Perintah gagal mengatakan print0 bukan perintah yang valid dan minus terakhir bukan bendera yang dikenali. Saya tidak berpikir pendekatan ini akan berhasil karena man dutidak mencantumkan tanda filesatau frombendera.
Shardul Upadhyay
Anda harus menambahkan sistem operasi Anda sebagai tanda pada pertanyaan. Saya berasumsi Anda memiliki GNU tetapi lupa menyebutkan itu.
jw013
1
Dapatkan dukungan dari saya! Solusi khusus Anda berfungsi du -chuntuk mendapatkan total besar file yang cocok:find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn
9

Saya biasanya menggunakan:

find . -type f -print0 | xargs -r0 du -a

Xargs biasanya memanggil perintah, bahkan jika tidak ada argumen yang dilewati; xargs du </dev/nullmasih akan dipanggil, xargs -r du </dev/nulltidak akan memanggil du. The -0Argumen terlihat untuk null-string diakhiri bukan baris baru dihentikan.

Maka saya biasanya menambahkan | awk '{sum+=$1} END {print sum}'di akhir untuk mendapatkan total.

Arcege
sumber
2
Nilai then I usually addemas :-)
Radek
2

Ini adalah versi dengan nama parameter panjang dan penyortiran manusia.

find . -type f -exec du --human {} + | sort --human --reverse | head

Saya juga melihat tidak perlu -a/--alldilewatkan du.

Tarrasch
sumber
-2

file tertentu dalam direktori saat ini

du -ch files*

lebih pendek dan bekerja untuk saya

du -sh .

untuk dir saat ini dan semua file dalam sub

du (GNU coreutils) 8.30

orang kerdil
sumber
1
(1) Apa maksudmu du -ch files*? Misalkan direktori saat mengandung ant, apple, banana, bat, cat, corn, date, dan dog, di mana nama-nama hewan subdirektori dan buah / sayuran nama adalah file - perintah apa yang akan Anda gunakan untuk mendapatkan hanya file? Atau bukankah itu yang Anda maksudkan? (2)  du -sh .hanya akan melaporkan semua yang ada di dalam dan di bawah direktori saat ini, dan bukan file itu sendiri. Ini benar-benar kebalikan dari pertanyaan yang diajukan.
G-Man Mengatakan 'Reinstate Monica'