Назад | Перейти на главную страницу

Как найти самые большие файлы в каталоге - игнорируя размеры каталогов

Я хочу сделать что-то подобное

du -a | sort -rn | head

Но я хочу извлекать только файлы, игнорируя каталоги.

Для ясности, я хочу пройтись по всем подкаталогам, но не хочу находить размеры каталогов. Просто размеры файлов.

ОБНОВИТЬ

Еще хочу вернуть полный путь к файлам

Это должно работать:

find <path> -type f -exec du -a{} + | sort -rn | head

Взято из http://unix-linux.itags.org/q_unix-linux-programming_84920.html

Я просто хочу добавить свое решение, хотя оно не так полно, как решение @Michael Plotke

ls -lR | egrep "^-" | awk '{ print $5, "\t", $8 }' | sort -rn | head

ОБНОВЛЕНИЕ 1

Теперь мне пришлось использовать этот сценарий в BSD unix (что я изначально не собирался делать) и обнаружил, что решение Майкла не работает.

Благодаря включению решения @teve в мое решение стало более удобным для использования в системах BSD:

find . -type f | xargs ls -lS | awk '{ print $5, "\t", $9 }' | head

ОБНОВЛЕНИЕ 2

Дальнейшая доработка. Решает проблемы с необычными именами файлов (например, пробелами)

find . -type f -print0 | xargs -0 ls -lS | awk '{ print $5, "\t", $9 }' | head

Заметка: Я обнаружил, что это решение значительно быстрее на WSL (подсистема Windows Linux), чем принятое решение.

В каталоге, содержащем около 1000 файлов, это решение занимает секунды, тогда как принятый ответ занял десятки минут.

Один из способов найти самый большой файл в каталоге:

find . -type f | xargs ls -1S | head -n 1