Как я могу перечислить (используя ls
) все файлы, которые не являются пустыми (размер> 0), используя linux?
7 ответов
Я бы использовал find dirname -not -empty -ls
, предполагая, что GNU find.
Это работа для find ls не достаточно мощная.
find -maxdepth 1 -size +0 -print
-maxdepth 1
- это команда find для поиска только текущего каталога , удаления для просмотра всех вложенных каталогов или изменения числа для перехода на 2, 3 или более уровней.
-size +0
это говорит find искать файлы с размером больше 0
байт. 0
можно изменить на любой размер, который вы захотите.
-print
указывает find распечатать полный путь к найденному файлу
Редактировать:
Позднее добавление: Вы, вероятно, также должны добавить параметр -type f
выше. Это говорит найти только для поиска файлов. И, как отмечено в комментариях ниже, параметр -print
самом деле не нужен.
find dirname -type f ! -empty
У 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
.
ls -l | awk '{if ($5 != 0) print $9}'
Если вы собираетесь использовать ls
, вам нужна небольшая помощь от awk
.
$ find /* -type f ! -size 0
будет работать лучше, если вы хотите все непустые файлы, а не только каталоги.
Bash 4.0+
shopt -s globstar
shopt -s nullglob
for file in **/*; do test -f "$file" && [[ -s "$file" ]] && echo "$file"; done