Вопрос: Как я могу перечислить только непустые файлы с помощью ls?


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


26
2017-09-23 12:39


Источник




Ответы:


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


43
2017-09-23 17:38



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


Это работа для найти ls недостаточно силен.

find -maxdepth 1 -size +0 -print

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

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

-print сообщает find, чтобы распечатать полный путь к файлу, который он находит

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


17
2017-09-23 13:03



Чтобы избежать предупреждения, вы должны -maxdepth 1 до -size +0, Также -print это действие по умолчанию, поэтому оно не требуется. - cYrus
@cYrus - никаких предупреждений для меня (cygwin) - Nifle
Реализации find сильно меняются с точки зрения того, какие действительные варианты и куда они могут пойти. GNU find (что ужасно распространено) будем выдать предупреждение, если вы положите -size до -maxdepth, - Telemachus
@Tele - Приятно знать, спасибо. - Nifle


find dirname -type f ! -empty


9
2017-09-23 12:51





У 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,


7
2017-09-23 20:11





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

Если вы намерены использовать ls, вам нужно немного помочь awk,


5
2017-09-23 17:17





 $ find /* -type f ! -size 0

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


3
2017-09-23 13:07





Bash 4.0+

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

0
2017-10-03 04:33