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.
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.
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.
ls
dan Anda menggunakanfind
;) Saya naik meskipun ... Ini solusi yang tepatIni adalah pekerjaan untuk menemukan ls tidak cukup kuat.
-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 dari0
byte.0
dapat diubah ke ukuran yang Anda inginkan.-print
memberitahu find untuk mencetak path lengkap ke file yang ditemukannyaSunting:
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.sumber
-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. GNUfind
(yang sangat umum) akan menghasilkan peringatan jika Anda menempatkan-size
sebelumnya-maxdepth
.find dirname -type f ! -empty
sumber
Jika Anda bermaksud menggunakan
ls
, Anda butuh sedikit bantuanawk
.sumber
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):Pengguna kerang lain harus menggunakan find. Dengan GNU find (seperti kebanyakan ditemukan di Linux):
Cara yang sesuai dengan POSIX adalah:
Jika
ls
itu bukan hanya sebuah contoh dan Anda hanya berniat inspeksi visual, Anda bisa mengurutkan berdasarkan ukuran:ls -S
.sumber
akan bekerja lebih baik jika Anda menginginkan semua file yang tidak kosong, bukan hanya direktori.
sumber
Bash 4.0+
sumber