Apakah mungkin untuk digunakan ls
di Unix untuk membuat daftar ukuran total dari suatu sub-direktori dan semua isinya sebagai lawan dari yang biasanya 4K
(saya berasumsi) hanyalah file direktori itu sendiri?
total 12K
drwxrwxr-x 6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk
Setelah memeriksa halaman manual, saya menjadi kosong.
alias ducks='du -cksh * | sort -hr | head -n 15'
Jawaban:
Coba sesuatu seperti:
versi pendek dari:
Penjelasan:
du
: D isk U sage-s
: Menampilkan ringkasan untuk setiap file yang ditentukan. (Setara dengan-d 0
)-h
: Keluaran "Dapat dibaca manusia". Gunakan sufiks unit: B yte, K ibibyte (KiB), M ebibyte (MiB), G ibibyte (GiB), T ebibyte (TiB) dan P ebibyte (PiB). (BASE2)sumber
*(D)
untuk mencocokkan file yang tersembunyi ( d ) dengan file normal. Saat menggunakan bash, Anda bisa menggunakan* .[!.]*
untuk mencocokkan keduanya.du -sch * .[!.]* | sort -rh
sangat bagus (tampilkan keluaran yang diurutkan) Di mac lakukan:brew install coreutils
dan kemudiandu -sch * .[!.]* | gsort -rh
du -sk * | sort -n
akan mengurutkan folder berdasarkan ukuran. Bermanfaat saat ingin membersihkan ruang ..sumber
| tail -r
untuk disortir berdasarkan yang terbesar terlebih dahulu.sort -rn
mengurutkan hal-hal dalam urutan angka terbalik.sort -rn | head -n 10
hanya akan menampilkan beberapa teratas, jika itu menarik.sort -rh
akan bekerja dengan baikdu -cksh *
karena memilah unit yang dapat dibaca manusia.du -ksh | sort -rn
sama dengandu -cksh | sort -rn
. Sama sepertidu -ksh
sama dengandu -cksh
.Ini akan ditampilkan dalam format yang dapat dibaca manusia.
sumber
sort -h
di sini: gnu.org/software/coreutils/manual/... Ini terutama sana untuk menyortir103K
,102M
,1.1G
dll Hal ini harus tersedia pada banyak sistem saat ini, tapi tidak semua.du -sh * | sort -rh
(-r untuk daftar folder yang lebih besar dulu)du -sh $(ls -A) | sort -h
Untuk daftar direktori terbesar dari direktori saat ini dalam format yang dapat dibaca manusia:
du -sh * | sort -hr
Cara yang lebih baik untuk membatasi jumlah baris bisa dilakukan
du -sh * | sort -hr | head -n10
Di mana Anda dapat menambah akhiran
-n
bendera untuk membatasi jumlah baris yang terdaftarSampel:
Itu membuatnya lebih mudah untuk dibaca :)
sumber
Untuk menampilkannya dalam
ls -lh
format, gunakan:Kode awk menjelaskan:
Output sampel:
sumber
--color=no
sort --key=5,5h
untuk menyortir 'unit yang dapat dibaca manusia' dari kolom kelimasort: stray character in field spec: invalid field specification
5,5h'`. Saya benar-benar benci macs kadang-kadang = \Perintah yang Anda inginkan adalah 'du -sk' du = "penggunaan disk"
Bendera -k memberi Anda output dalam kilobyte, daripada du default dari sektor disk (blok 512-byte).
Bendera -s hanya akan mencantumkan hal-hal di direktori tingkat atas (yaitu, direktori saat ini, secara default, atau direktori yang ditentukan pada baris perintah). Aneh bahwa du memiliki perilaku yang berlawanan dari ls dalam hal ini. Secara default du akan secara rekursif memberi Anda penggunaan disk setiap sub-direktori. Sebaliknya, ls hanya akan memberikan daftar file dalam direktori yang ditentukan. (ls -R memberi Anda perilaku rekursif.)
sumber
Masukkan deklarasi fungsi shell ini dalam skrip inisialisasi shell Anda:
Saya menyebutnya
duls
karena menampilkan output dari keduanyadu
danls
(dalam urutan itu):Penjelasan:
The
paste
utilitas menciptakan kolom dari input sesuai dengan spesifikasi yang Anda berikan. Diberikan dua file input, itu menempatkan mereka berdampingan, dengan tab sebagai pemisah.Kami memberikan output
du -hs -- "$@" | cut -f1
sebagai file pertama (input stream really) dan outputls -ld -- "$@"
sebagai file kedua.Dalam fungsi tersebut,
"$@"
akan mengevaluasi daftar semua argumen baris perintah, masing-masing dalam tanda kutip ganda. Karena itu ia akan memahami karakter globbing dan nama jalur dengan spasi dll.Minus ganda (
--
) menandakan akhir opsi baris perintah kedu
danls
. Tanpa ini, mengatakanduls -l
akan membingungkandu
dan opsi apa pundu
yangls
tidak dimiliki akan membingungkanls
(dan opsi yang ada di kedua utilitas mungkin tidak berarti hal yang sama, dan itu akan sangat berantakan).The
cut
setelahdu
hanya memotong kolom pertama daridu -hs
output (ukuran).Saya memutuskan untuk meletakkan
du
output di sebelah kiri, kalau tidak saya harus mengelola kolom kanan goyah (karena panjangnya nama file yang bervariasi).Perintah tidak akan menerima bendera baris perintah.
Ini telah diuji di keduanya
bash
dan diksh93
. Itu tidak akan bekerja dengan/bin/sh
.sumber
Saya selalu menggunakan
du -sk
(-k
flag menunjukkan ukuran file dalam kilobyte) sebagai gantinya.sumber
sumber
ncdu
ncursesdu
Utilitas CLI yang luar biasa ini memungkinkan Anda untuk dengan mudah menemukan file dan direktori besar secara interaktif.
Sebagai contoh, dari dalam pohon proyek terkenal kami lakukan:
Hasilnya:
Lalu, saya masuk ke bawah dan ke kanan pada keyboard saya untuk masuk ke
/drivers
folder, dan saya melihat:ncdu
hanya menghitung ukuran file secara rekursif sekali pada saat startup untuk seluruh pohon, sehingga efisien."Total penggunaan disk" vs "Ukuran nyata" adalah analog dengan
du
, dan saya telah menjelaskannya di: mengapa output dari `du` sering sangat berbeda dari` du -b`Beranda proyek: https://dev.yorhel.nl/ncdu
Pertanyaan-pertanyaan Terkait:
Diuji di Ubuntu 16.04.
ncdu
penggunaan non-interaktifFitur keren lainnya
ncdu
adalah Anda dapat terlebih dahulu membuang ukuran dalam format JSON, dan kemudian menggunakannya kembali.Misalnya, untuk menghasilkan menjalankan file:
dan kemudian memeriksanya secara interaktif dengan:
Ini sangat berguna jika Anda berurusan dengan sistem file yang sangat besar dan lambat seperti NFS.
Dengan cara ini, Anda dapat mengekspor hanya sekali pertama, yang dapat memakan waktu berjam-jam, dan kemudian menjelajahi file, berhenti, menjelajah lagi, dll
Format output hanya JSON, sehingga mudah digunakan kembali dengan program lain juga, misalnya:
memperlihatkan struktur data tree direktori sederhana:
Diuji di Ubuntu 18.04.
sumber
du -sch * di direktori yang sama.
sumber
Ini yang saya suka
pembaruan : Saya tidak suka yang sebelumnya karena tidak menampilkan file di direktori saat ini, itu hanya daftar direktori.
Contoh output untuk
/var
di ubuntu:sudo du -hDaxd1 /var | sort -h | tail -n10
sumber
Ini semua adalah saran bagus, tapi yang saya gunakan adalah:
-ksh
pastikan file dan folder terdaftar dalam format yang dapat dibaca manusia dan dalam megabita, kilobyte, dll. Kemudian Anda mengurutkannya secara numerik dan membalikkannya sehingga menempatkan yang lebih besar terlebih dahulu.Satu-satunya downside ke perintah ini adalah bahwa komputer tidak tahu bahwa Gigabyte lebih besar dari Megabyte sehingga hanya akan mengurutkan berdasarkan angka dan Anda akan sering menemukan daftar seperti ini:
Berhati-hatilah untuk melihat unit.
Perintah ini juga berfungsi pada Mac (padahal
sort -h
tidak misalnya).sumber
-h
bendera daridu
perintah, Anda memotong sisi buruknya-h
bukan-n
dalam bentuk juga.du memiliki opsi lain yang bermanfaat:
-S, --separate-dirs
mengatakan du tidak menyertakan ukuran subdirektori - berguna pada beberapa kesempatan.Contoh 1 - hanya menampilkan ukuran file dalam direktori:
Contoh 2 - menunjukkan ukuran file dan subdirektori dalam direktori:
sumber
du -sm * | semacam -nr
Output berdasarkan ukuran
sumber
lihat
du
perintah untuk itusumber
hanya peringatan, jika Anda ingin membandingkan ukuran file. du menghasilkan hasil yang berbeda tergantung pada sistem file, ukuran blok, ...
Mungkin saja ukuran file berbeda, misalnya membandingkan direktori yang sama pada hard disk lokal Anda dan perangkat penyimpanan massal USB. Saya menggunakan skrip berikut, termasuk ls untuk meringkas ukuran direktori. Hasilnya dalam byte yang memperhitungkan semua sub direktori.
sumber
Untuk menampilkan file direktori saat ini dan ukuran subdirektori secara rekursif:
Untuk menampilkan informasi ukuran yang sama tetapi tanpa mencetak sub direktori mereka secara rekursif (yang bisa menjadi daftar besar), cukup gunakan opsi --max-depth :
sumber
Untuk sementara, saya menggunakan Nautilus (di desktop Gnome di RHEL 6.0) untuk menghapus file di folder rumah saya alih-alih menggunakan
rm
perintah di bash. Akibatnya, ukuran total ditunjukkan olehtidak cocok dengan jumlah penggunaan disk setiap sub-direktori, ketika saya menggunakan
Butuh beberapa saat untuk menyadari Nautilus mengirim file yang dihapus ke folder Trash-nya, dan folder itu tidak tercantum dalam
du -sh *
perintah. Jadi, hanya ingin berbagi ini, kalau-kalau ada yang menghadapi masalah yang sama.sumber
Hmm, cara terbaik adalah menggunakan perintah ini:
Maka Anda akan bisa mendapatkan semua folder ukuran di semua server Anda. Mudah membantu Anda menemukan ukuran terbesar.
sumber
Berikut ini mudah diingat
https://explainshell.com/explain?cmd=ls+-ltrapR
sumber
Jika Anda ingin lebih banyak kontrol atas daftar
size
yang ingin Anda daftarkan, Anda dapat menggunakan sakelarthreshold
(-t
) seperti pada:du
-d
Isku
sageh
- format yang dapat dibaca manusiat
- ukuran ambang batasDi sini, kami ingin membuat daftar semua direktori yang berukuran lebih dari 1GB.
Penjelasan :
Unit yang dijelaskan dalam wiki mengikuti:
sumber
Saya mengalami masalah yang mirip dengan apa yang dijelaskan Martin Wilde, dalam kasus saya membandingkan direktori yang sama pada dua server yang berbeda setelah mirroring dengan rsync.
Alih-alih menggunakan skrip saya menambahkan
-b
bendera kedu
yang menghitung ukuran dalam byte dan sejauh yang saya dapat menentukan menghilangkan perbedaan pada dua server. Anda masih bisa menggunakan-s -h
untuk mendapatkan output yang komprehensif.sumber
letakkan di skrip init seperti .bashrc ... sesuaikan def sesuai kebutuhan.
sumber
ketik "ls -ltrh / path_to_directory"
sumber