Saya mencari daftar seluruh isi direktori, termasuk isi dari subfolder tetapi diurutkan berdasarkan filesize. Sejauh ini saya sudah berhasil mendapatkan daftar dan pemilahan sementara masih bersifat rekursif ls -lhSR
( h
bagus untuk dimiliki tetapi jelas tidak penting bagi saya, selama saya bisa mendapatkan ukuran file). Saya cenderung mengabaikan sesuatu yang jelas, atau meminta yang tidak mungkin, tetapi saran apa pun di sini akan sangat dihargai.
9
Karena Anda tidak menentukan shell tertentu, inilah alternatif menggunakan kualifikasi glob zsh dengan
untuk rekursi. Lalu misalnya:
daftar file biasa secara rekursif:
rekursif daftar file polos, o rdered oleh di kekusutan L ength (yaitu ukuran):
daftar file biasa secara rekursif, O rdered oleh de creasing ukuran:
daftar file biasa secara rekursif, dipesan dengan ukuran yang dikurangi, dan pilih 3 hasil teratas:
Jika Anda menginginkan ukuran file juga, maka Anda bisa menggunakannya
sumber
Dengan
globstar
opsi shell, Anda dapat menggunakan shell globbing:Jika Anda mencobanya dengan terlalu banyak file, Anda akan mendapatkan kesalahan "Daftar argumen terlalu panjang". Untuk mengatasinya, Anda dapat menggunakan
printf
danxargs
:Saya baru menyadari ini mencetak direktori (dengan ukuran 4096 byte) juga - jika Anda tidak menginginkannya, gunakan ini sebagai gantinya:
Contoh dijalankan
sumber
dotglob
opsi shell, lihat jawaban saya yang diperbarui.printf "%s\0" **/* | xargs -0 sh -c 'for f; do [ -d "$f" ] || stat -c "%s %n" "$f"; done' sh | sort -n
ls -lhSd **/*
jika Anda tidak keberatan memiliki direktori sebagai bagian dari daftar. Atau jika tidak ada nama direktori Anda.
di dalamnya, dan semua file yang ingin Anda lakukan , Anda bisall -hS **/*.*
, atau serupa.Jika Anda tidak memiliki zsh, Anda masih dapat menggunakan
du
+sort
:Ukuran yang dapat dibaca manusia, termasuk ukuran kumulatif direktori:
Hanya file (menggunakan
find
):Dalam kedua kasus, saya telah memilih untuk menggunakan garis nol-dihentikan (
-0
,-z
,-print0
pilihan), aman terhadap semua nama file yang valid.sumber
Untuk penggunaan interaktif cepat pada pohon direktori yang tidak terlalu besar,
shopt -s globstar
sangat bagus. Sebuah gumpal tidak dapat menyaring direktori berdasarkan jenis, tetapi jika Anda menggunakannya denganls -d
kemudianls
hanya akan mencetak nama direktori, bukan isi.Dengan asumsi
ll
alias Anda termasuk-lh
:akan memberi Anda output seperti ini (dari direktori kode-golf saya), tetapi dengan penyorotan warna (sehingga lebih mudah untuk melihat direktori). Perhatikan bahwa penyortiran menurut ukuran file terjadi di seluruh subdirektori.
Anda dapat memfilter direktori dengan menyalurkan melalui
grep -v '^d'
Terkadang Anda dapat menggunakan gumpalan yang hanya cocok dengan file dan bukan direktori, jika nama file Anda memiliki pola. misalnya
ll -rSd **/*.jpg
, atau bahkan**/*.*
berfungsi jika tidak ada nama direktori Anda.
di dalamnya, dan semua file yang ingin Anda lakukan .(Untuk orang-orang dengan latar belakang DOS: tidak ada yang ajaib
*.*
di Unix. Itu hanya cocok dengan entri direktori yang mengandung titik literal. Tetapi selain file executable dan terkadang file teks, adalah umum untuk memberikan ekstensi ke nama file.)@dihkan menunjukkan Anda akan perlu
shopt -s dotglob
untuk mencocokkan semua file.Dengan GNU
find
Jika tidak ada terlalu banyak file untuk dipasangkan pada satu
ls
baris perintah,find -exec ls {} +
akan meletakkan semuanya pada baris perintah di manals
dapat mengurutkannya.Menggunakan
-not -type d
alih-alih-type f
menghindari mengabaikan symlink, bernama pipa, soket, file perangkat, dan apa pun yang Anda temukan di direktori Anda.Dengan
du
:Sekarang nama direktori disortir ke dalam daftar dengan menjumlahkan semua kontennya, tetapi masing-masing file masih disertakan.
sort -h
, alias--human-numeric-sort
, mengurutkan angka dengan sufiks ukuran sepertidu -h
cetakan. Ini sempurna untuk digunakan bersamadu
.Saya sering menggunakan
du -sch * | sort -h
, atau*/
hanya mendapatkan direktori.du -sch **/* | sort -h
akan memberi Anda output di atas, jika Anda lupa bahwadu
memiliki-a
opsi.(Saya hanya meluangkan waktu untuk mencarinya karena saya memposting jawaban. Untuk penggunaan interaktif, saya mungkin hanya akan menggunakan
du -sch **/*
.sumber