Як я можу перерахувати лише не порожні файли за допомогою ls?


36

Як я можу перерахувати (використовуючи ls) всі файли, які не є порожніми (розмір> 0) за допомогою Linux?

Відповіді:


49

Я б використовував find dirname -not -empty -ls, припускаючи GNU знайти.


1
Комусь хочеться пояснити сутичку?
Daenyth

Можливо, тому, що запитуючий запитував, lsі ти скористався find;) Хоча я підняв… Це правильне рішення
BloodPhilia

2
Якщо ви використовуєте "find. -Not -empty -ls", він також буде включати поточний каталог (тобто "." У його вихід), щоб просто включити поточні файли, використовуючи "find. -Type f -not -empty -ls"
користувач672009

19

Ця робота для пошуку ls недостатньо потужна.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - це вказує на пошук лише для пошуку поточного dir, видалення, щоб переглянути всі підрежими, або змінити номер, щоб знизитися на 2, 3 або більше рівнів.

-size +0це говорить про пошук файлів, розмір яких більший за 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кваліфікувати класифікатор, щоб зберігати лише файли, розмір яких> 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

працюватиме краще, якщо ви хочете, щоб усі непорожні файли, а не просто каталоги.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.