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.