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


36

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

Ответы:


49

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


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переключатель на самом деле не нужен.


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.


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

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


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.