31

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

7 ответов7

47

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

17

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

find -maxdepth 1 -size +0 -print

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

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

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

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

9

find dirname -type f ! -empty

7

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

В Zsh, вы можете L Подстановка классификатор , чтобы сохранить только те файлы, размер которых> 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 .

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

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

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

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

0

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .