выбрать каталоги по имени и отсортировать список по размеру

Кажется, что применив решение из https://unix.stackexchange.com/a/307498/111048(, которое обрабатывает выключение ), моя проблема также решена!

1
12.04.2021, 17:49
2 ответа

du не обрабатывает поток текста, ему нужен список имен файлов. Это означает, что вы не можете просто передать ему поток текста, даже если этот поток содержит имена файлов, потому что он не может его прочитать. Итак, у вас есть два основных варианта: :i )использовать инструмент xargs, который предназначен именно для таких вещей, или ii )прочитать имена файлов в цикле и передать их du. Из двух, xargsявляется самым простым :

.
find -name '.stversions' | xargs du -hd1 | sort -h 

Однако этот подход не работает, если какой-либо из ваших путей содержит пробельные символы. Более надежным решением был бы ответ Роаймы или, альтернативно, использование инструментов GNU :

.
find -type d -name '.stversions' -print0 | xargs -0 du -hd1 | sort -h 
            
1
28.04.2021, 22:52

Стандартная команда duне ожидает ввода от stdin , поэтому передача в нее не будет иметь никакого эффекта. (Он также не обрабатывает -hили -d1. )Версия GNU будет принимать разделенный NUL -список файлов (см.man du).

Если вы собираетесь использовать GNU du, вы также можете использовать записи с завершением NUL -во всем конвейере, что будет соответствовать именам файлов (именам каталогов ), содержащим неожиданные символы, включая пробелы.

find -type d -name '.stversions' -print0 | du -h -d1 --files-from0 - -0 | sort -z -h | tr '\0' '\n'
2
28.04.2021, 22:52

Теги

Похожие вопросы