Как я могу перечислить только непустые файлы, используя ls?

36

Как я могу перечислить (используя ls) все файлы, которые не являются пустыми (размер> 0), используя Linux?

Дэвид Б
источник

Ответы:

49

Я бы использовал find dirname -not -empty -ls, предполагая, что GNU find.

Daenyth
источник
1
Кто-нибудь хочет объяснить понижение голосов?
Дениф
Вероятно, потому что спрашивал аскер, lsа вы использовали find;) Я поднял хотя ... Это правильное решение
BloodPhilia
2
Если вы используете «find. -Not -empty -ls», он также будет включать текущий каталог (то есть «.» В свой вывод), чтобы просто включить текущие файлы, используйте «find. -Type f -not -empty -ls»
user672009 10.10.16
19

Это работа для find ls не достаточно мощная.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - это говорит find для поиска только текущего dir, удаления для просмотра всех sub dir или изменения номера для перехода на 2, 3 или более уровней.

-size +0это говорит find искать файлы с размером больше 0байтов. 0может быть изменен на любой размер, который вы хотите.

-print говорит find распечатать полный путь к найденному файлу

Изменить:
Позднее добавление: Вы, вероятно, также должны добавить -type fпереключатель выше. Это говорит найти только для поиска файлов. И, как отмечено в комментариях ниже, -printпереключатель на самом деле не нужен.

Nifle
источник
1
Чтобы избежать предупреждения вы должны разместить -maxdepth 1раньше -size +0. Также -printявляется действием по умолчанию, поэтому оно не требуется.
cyrus
@cYrus - Никаких предупреждений для меня (cygwin)
Nifle
Реализации findсильно различаются с точки зрения того, какие допустимые варианты и куда они могут пойти. GNU find(который очень распространен) выдаст предупреждение, если вы поставите его -sizeраньше -maxdepth.
Телемах
8
ls -l | awk '{if ($5 != 0) print $9}'

Если вы намереваетесь использовать ls, вам нужна небольшая помощь от awk.

MaQleod
источник
7

У Ls почти нет возможности фильтровать файлы: это не его работа. Фильтрация файлов - это работа оболочки для простых дел (с помощью глобализации) и работа поиска для сложных дел.

В zsh вы можете использовать Lклассификатор globbing для сохранения только тех файлов, размер которых> 0 ( .классификатор ограничен обычными файлами):

ls *(.L+0)

Пользователи других оболочек должны использовать find. С помощью GNU find (как в основном в Linux):

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

POSIX-совместимый способ:

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

Если lsне просто пример , и вы просто собираетесь визуальный осмотр, вы могли бы сортировать по размеру: ls -S.

Жиль "ТАК - прекрати быть злым"
источник
3
 $ find /* -type f ! -size 0

будет работать лучше, если вы хотите все непустые файлы, а не только каталоги.

Trezoid
источник
1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
user31894
источник