Скрипт Bash для поиска файлов определенного типа с абсолютным путем и сортировки их по размеру

Как в bash искать файлы определенного типа (например, «*.txt») в каталоге и его подкаталогах. Затем отобразите файлы в порядке убывания размера вместе с их размером и полным путем.

Я пробовал следующее, но это не работает.

find . -type f -name "*.txt" -print0 | ls -sS

Как я могу это сделать?


person SyncMaster    schedule 01.08.2012    source источник


Ответы (3)


Для этого вы можете использовать опцию printf GNU find:

find "$PWD" -type f -name '*.txt' -printf "%s %h/%f\n" | sort -rg

Чтобы показать размер в КБ вместо байтов:

find "$PWD" -type f -name '*.txt' -printf "%k %h/%f\n" | sort -rg
person jordanm    schedule 01.08.2012
comment
Хороший. Гораздо лучше, чем мой ответ. - person walrii; 01.08.2012

find . -type f -name "*.txt" -print0 | xargs -0 ls -sS

Должно работать, если только нет множества соответствующих файлов (man xargs(1), чтобы увидеть значения по умолчанию)

Комментарий Swiss ниже, если он на 100% верен, xargs -0 - это путь, так как вы используете find -print0

person John3136    schedule 01.08.2012

find . -type f -name "*.txt" | xargs -i{} stat {} --format "%012s %n" | sort -r

Дает размер в байтах.

person walrii    schedule 01.08.2012
comment
Следует отметить, что для этого требуется GNU stat. - person jordanm; 01.08.2012