Jawaban:
Saya akan menggunakan find dirname -not -empty -ls
, dengan asumsi GNU temukan.
ls
dan Anda menggunakan find
;) Saya naik meskipun ... Ini solusi yang tepat
Ini adalah pekerjaan untuk menemukan ls tidak cukup kuat.
find -maxdepth 1 -size +0 -print
-maxdepth 1
- ini memberi tahu find untuk mencari dir saja saat ini, menghapus untuk melihat semua sub dirs atau mengubah nomor untuk turun 2, 3 atau lebih level.
-size +0
ini memberitahu menemukan untuk mencari file dengan ukuran lebih besar dari 0
byte. 0
dapat diubah ke ukuran yang Anda inginkan.
-print
memberitahu find untuk mencetak path lengkap ke file yang ditemukannya
Sunting:
Tambahan tambahan: Anda mungkin juga harus menambahkan -type f
sakelar di atas. Ini memberitahu find untuk hanya menemukan file. Dan seperti yang tercantum dalam komentar di bawah ini, -print
saklar tidak benar-benar diperlukan.
-maxdepth 1
sebelumnya -size +0
. Juga -print
merupakan tindakan default, jadi itu tidak diperlukan.
find
sangat bervariasi dalam hal apa opsi yang valid dan ke mana mereka bisa pergi. GNU find
(yang sangat umum) akan menghasilkan peringatan jika Anda menempatkan -size
sebelumnya -maxdepth
.
Ls hampir tidak memiliki opsi untuk memfilter file: itu bukan tugasnya. Memfilter file adalah tugas shell untuk kasus-kasus sederhana (melalui globbing) dan pekerjaan mencari untuk kasus-kasus kompleks.
Di zsh, Anda dapat L
kualifikasi globbing untuk hanya menyimpan file yang ukurannya> 0 ( .
kualifikasi membatasi ke file biasa):
ls *(.L+0)
Pengguna kerang lain harus menggunakan find. Dengan GNU find (seperti kebanyakan ditemukan di Linux):
find -maxdepth 1 -type f ! -empty -exec ls {} +
Cara yang sesuai dengan POSIX adalah:
find . -type f -size +0c -exec ls {} + -o -name . -o -prune
Jika ls
itu bukan hanya sebuah contoh dan Anda hanya berniat inspeksi visual, Anda bisa mengurutkan berdasarkan ukuran: ls -S
.
Bash 4.0+
shopt -s globstar
shopt -s nullglob
for file in **/*; do test -f "$file" && [[ -s "$file" ]] && echo "$file"; done