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


Jawaban:


49

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


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.


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


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

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


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.


3
 $ find /* -type f ! -size 0

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


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.