Saya mencoba menemukan semua file besar di server Centos saya. Untuk melakukan itu saya menggunakan:
find / -maxdepth 10 -size +100000 -ls
Aku mencoba mengubah -ls
ke -lsh
tetapi tidak diperbolehkan.
Bagaimana saya bisa menampilkan hasil ini dengan ukuran yang bisa dibaca manusia (menggunakan sufiks k, M, ...)?
file
utilitasfind
.Jawaban:
find
tidak memiliki opsi canggih sepertils
. Jika inginls -h
, Anda perlu meneleponls
.Saya merekomendasikan
-xdev
opsi untuk menghindari berulang ke sistem file lain, yang akan sia-sia jika Anda khawatir tentang ruang disk.Jika Anda menggunakan zsh sebagai shell, maka alih-alih menggunakan
find
, Anda dapat menggunakan kualifikasi glob. Membatasi ukuran file sederhana:L
diikuti dengan ukuran; ukuran dapat memiliki unit opsional sebelum nomor tersebut. Jika Anda tidak peduli dengan kedalaman maksimum, Anda dapat menggunakannya**/
untuk kembali ke subdirektori. Jika Anda peduli dengan kedalaman maksimum, itu lebih rumit karena pola zsh glob tidak memiliki cara untuk mengekspresikan "paling banyak n kejadian". Untuk menghindari rekursi lintas perangkat, gunakand
kualifikasi glob; Anda perlu menemukan nomor perangkat, yang dapat Anda tampilkan denganstat
perintah di Linux (stat -c %d /
hanya menampilkan nomor) atau denganstat
builtin zsh sendiri (jalankanzmodload zsh/stat
untuk memuatnya).sumber
Perintah yang Anda coba dapat dibaca oleh saya. Namun, Anda dapat menggunakan utilitas file dengan find seperti di bawah ini.
Cara lain untuk melakukan ini adalah menggunakan perintah di bawah ini.
Perintah di atas akan memberi Anda file dalam ukuran file yang diurutkan.
Jika Anda menggunakan coreutils> 7.5 , Anda dapat mengeluarkan perintah di bawah ini untuk membuat daftar file berdasarkan ukuran.
Di mesin saya, saya tidak memiliki
sort -h
opsi yang tersedia.Seperti yang telah Anda sebutkan dalam komentar, format yang dapat dibaca manusia adalah file harus berukuran kb , mb atau gb . Saya akan pergi dengan perintah kedua yang telah saya posting sebagai jawabannya. Output yang saya dapatkan ketika saya menggunakannya di sistem saya adalah,
sumber
> output
perintah. Kemudian, Anda dapat membuka file dan melihat output sesuai keinginan :)du -a --max-depth=10 / | sort -rn
adalah kedekatan yang bisa kutemukan. Namun, dalam hal ini, itu tidak akan menampilkan ukuran dalam KB, MB atau GB.Saya pikir apa yang Anda cari lebih seperti yang berikut ini.
The
-exec
memungkinkan Anda untuk menjalankan perintah dan{}
digantikan dengan hasil temuan. Terakhir+
adalah untuk memberitahukan bahwa ini adalah akhir dari perintah dan diperlukan.sumber
{}
sini. Kutipan tunggal dalam perintah adalah untuk shell tetapi shell tidak akan pernah melihatls -lah <args...>
perintah sama sekali - ia melihat{}
, yang tidak perlu dikutip. Itu adalahfind
yang melihatls -lah {}
danfind
yang memperluas{}
, dan seperti tersirat dengan nama-exec
opsi,find
menggunakanexec*
panggilan sistem pada argumen secara langsung, sehingga tidak akan ada masalah dengan spasi karenafind
tidak akan melakukan pemisahan kata pada nama file Anda.-a
pilihan untukls
tidak diperlukan karena argumen diharapkan menjadi file dan tidak direktori. GNU menemukan kegunaanls -dils
untuk-ls
opsi, jadi untuk mereplikasi yang paling dekat itu akanls -dilsh
.find . -type f -exec file '{}' \;
Menjalankan file pada setiap file di atau di bawah direktori saat ini. Perhatikan bahwa kurung kurawal ditutup dengan tanda kutip tunggal untuk melindunginya dari interpretasi sebagai tanda baca skrip shell. Tanda titik koma juga dilindungi oleh penggunaan backslash, meskipun tanda kutip tunggal bisa digunakan dalam kasus itu juga.{}
dikutip.