Jak wyświetlić listę niepustych plików przy użyciu ls?

36

Jak mogę wyświetlić (używając ls) wszystkie pliki, które nie są puste (rozmiar> 0) przy użyciu linux?

David B.
źródło

Odpowiedzi:

49

Użyłbym find dirname -not -empty -ls, zakładając, że GNU znajdzie.

Daenyth
źródło
1
Czy ktoś chciałby wyjaśnić opinię negatywną?
Daenyth,
Prawdopodobnie dlatego, że pytający o to poprosił, lsa ty wykorzystałeś find;) Podniosłem jednak ... To właściwe rozwiązanie
BloodPhilia
2
Jeśli użyjesz „find. -Not -empty -ls”, to włączy również bieżący katalog (tj. „.” W swoich wynikach), aby po prostu dołączyć bieżące pliki, użyj „find. -Type f -not -empty -ls”
user672009,
19

Jest to praca, ponieważ find ls nie jest wystarczająco potężny.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - to mówi find, aby przeszukał tylko bieżący katalog, usuń, aby przejrzeć wszystkie podkatalogi lub zmień liczbę, aby zejść o 2, 3 lub więcej poziomów.

-size +0to mówi find, aby szukał plików o rozmiarze większym niż 0bajty. 0można zmienić na dowolny rozmiar.

-print mówi find, aby wydrukować pełną ścieżkę do znalezionego pliku

Edycja:
późne dodawanie: prawdopodobnie powinieneś również dodać -type fprzełącznik powyżej. To mówi find, aby znaleźć tylko pliki. Jak zauważono w komentarzach poniżej, -printzmiana nie jest tak naprawdę potrzebna.

Nifle
źródło
1
Aby uniknąć ostrzeżenia, powinieneś je -maxdepth 1wcześniej umieścić -size +0. -printJest to również akcja domyślna, więc nie jest potrzebna.
cyr
@cYrus - Brak ostrzeżeń dla mnie (cygwin)
Nifle
Wdrożenia findróżnią się znacznie pod względem tego, jakie są prawidłowe opcje i gdzie mogą się udać. GNU find(co jest okropnie powszechne) wyświetli ostrzeżenie, jeśli zostanie wprowadzone -sizewcześniej -maxdepth.
Telemachus
10

find dirname -type f ! -empty

Joril
źródło
7

Ls prawie nie ma opcji filtrowania plików: to nie jest jego zadanie. Filtrowanie plików jest zadaniem powłoki dla prostych przypadków (poprzez globbing) i wyszukiwaniem dla skomplikowanych przypadków.

W zsh możesz Lkwalifikator globbing zachować tylko pliki o rozmiarze> 0 ( .kwalifikator ogranicza się do zwykłych plików):

ls *(.L+0)

Użytkownicy innych powłok muszą użyć find. Z GNU find (jak najczęściej w Linuksie):

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

Sposobem zgodnym z POSIX jest:

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

Jeśli lsnie był tylko przykład, a ty po prostu zamierza oględziny, można sortować według wielkości: ls -S.

Gilles
źródło
7
ls -l | awk '{if ($5 != 0) print $9}'

Jeśli zamierzasz używać ls, potrzebujesz trochę pomocy awk.

MaQleod
źródło
3
 $ find /* -type f ! -size 0

będzie działać lepiej, jeśli chcesz mieć wszystkie niepuste pliki, a nie tylko katalogi.

Trezoid
źródło
1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
użytkownik31894
źródło