Sadece boş olmayan dosyaları ls kullanarak nasıl listeleyebilirim?


Yanıtlar:


49

find dirname -not -empty -lsGNU’nun bulduğu varsayılarak kullanırdım .


1
Olumsuz oyu açıklamak isteyen var mı?
Daenyth

Asker istedi Muhtemelen çünkü lsve kullandığınız find;) olsa artırdı ... Bu uygun bir çözümdür
BloodPhilia

2
Eğer "find. -Not -empty -ls" kullanırsanız, geçerli dizini de içerecektir (yani çıktıda "."), Sadece "find. -Type f -not -empty -ls" kullanarak mevcut dosyaları içerecektir.
user672009 10:16

19

Bu iş bulmak için yeterince güçlü değil.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - bu bulucuya yalnızca geçerli dizini aramayı, tüm alt dizinlere bakmayı kaldırmayı veya 2, 3 veya daha fazla seviyeye inme sayısını değiştirmeyi söyler.

-size +0bu, 0bayttan daha büyük boyutlu dosyaları aramayı söyler . 0İstediğiniz herhangi bir boyuta değiştirilebilir.

-print bulduğu dosyanın tam yolunu yazmasını söyler

Düzenleme:
Geç ek: Büyük olasılıkla -type fyukarıdaki anahtarı da eklemelisiniz . Bu, yalnızca dosyaları bulmasını söyler. Ve aşağıdaki yorumlarda belirtildiği gibi, -printanahtar gerçekten gerekli değildir.


1
Bir uyarıyı önlemek için -maxdepth 1önce yerleştirmelisiniz -size +0. Ayrıca -printvarsayılan işlemdir, bu yüzden gerekli değildir.
cYrus

@cYrus - Benim için uyarı yok (cygwin)
Nifle

Uygulamaları findgeçerli tercihler ne açısından ve nerede gidebilir çok şey değişir. GNU find(çok yaygın olan) daha-size önce koyarsanız bir uyarı üretecektir -maxdepth.
Telemachus


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

Kullanmaya niyetliysen, lsbiraz yardıma ihtiyacın var awk.


7

Ls'in dosyaları filtreleme seçeneği neredeyse yok: bu onun işi değil. Dosyaları filtrelemek basit vakalar için kabuğun işi (globbing yoluyla) ve karmaşık durumlar için bulma işidir.

Zsh'de, Lglobbing niteleyicisini yalnızca> 0 olan dosyaları saklamak için niteleyebilirsiniz ( .niteleyici normal dosyalar ile sınırlıdır):

ls *(.L+0)

Diğer mermilerin kullanıcıları bulmalı. GNU bul ile (çoğunlukla Linux'ta bulunur):

find -maxdepth 1 -type f ! -empty -exec ls {} +

POSIX uyumlu bir yol:

find . -type f -size +0c -exec ls {} + -o -name . -o -prune

Eğer lsBoyuta göre sıralamak olabilir, sadece bir örnektir değildi ve sadece gözle kontrol niyetinde: ls -S.


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

Dizinler yerine tüm boş olmayan dosyaları istiyorsanız, daha iyi çalışacaktır.


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.