Bagaimana saya bisa mendaftar hanya file non-kosong menggunakan ls?

36

Bagaimana saya bisa mendaftar (menggunakan ls) semua file yang tidak kosong (ukuran> 0) menggunakan linux?

David B
sumber

Jawaban:

49

Saya akan menggunakan find dirname -not -empty -ls, dengan asumsi GNU temukan.

Daenyth
sumber
1
Adakah yang mau menjelaskan tentang downvote?
Daenyth
Mungkin karena penanya meminta lsdan Anda menggunakan find;) Saya naik meskipun ... Ini solusi yang tepat
BloodPhilia
2
Jika Anda menggunakan "find. -Not -empty -ls" itu juga akan menyertakan direktori saat ini (yaitu "." Dalam outputnya), untuk hanya memasukkan file saat ini menggunakan "find. -Type f -not -empty -ls"
user672009
19

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 +0ini memberitahu menemukan untuk mencari file dengan ukuran lebih besar dari 0byte. 0dapat 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 fsakelar di atas. Ini memberitahu find untuk hanya menemukan file. Dan seperti yang tercantum dalam komentar di bawah ini, -printsaklar tidak benar-benar diperlukan.

Nifle
sumber
1
Untuk menghindari peringatan Anda harus meletakkan -maxdepth 1sebelumnya -size +0. Juga -printmerupakan tindakan default, jadi itu tidak diperlukan.
cYrus
@cYrus - Tidak ada peringatan untuk saya (cygwin)
Nifle
Implementasi findsangat bervariasi dalam hal apa opsi yang valid dan ke mana mereka bisa pergi. GNU find(yang sangat umum) akan menghasilkan peringatan jika Anda menempatkan -sizesebelumnya -maxdepth.
Telemachus
10

find dirname -type f ! -empty

Joril
sumber
8
ls -l | awk '{if ($5 != 0) print $9}'

Jika Anda bermaksud menggunakan ls, Anda butuh sedikit bantuan awk.

MaQleod
sumber
7

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 Lkualifikasi 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 lsitu bukan hanya sebuah contoh dan Anda hanya berniat inspeksi visual, Anda bisa mengurutkan berdasarkan ukuran: ls -S.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
 $ find /* -type f ! -size 0

akan bekerja lebih baik jika Anda menginginkan semua file yang tidak kosong, bukan hanya direktori.

Trezoid
sumber
1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
pengguna31894
sumber