Мне интересно найти n самых больших подкаталогов (например, 3) в моем текущем каталоге И ТОГДА перечислять все файлы из них. Мне не интересно находить самые большие файлы. Я знаю, что существует множество решений для поиска больших файлов, и это не то, что я хочу.
Я нашел 3 самых больших подкаталога с линией:
$ du -hs */ | sort -rh | head -3
с результатом: [ ! d4]
212K 04/
52K 02/
20K 03/
, но каким-то образом я не могу перечислить файлы из этих каталогов (трубопровод с И THEN не работал). Любые предложения, как это сделать?
Подстановка команды с помощью awk для получения первых 3-х каталогов:
ls -l $(du -hs */ | sort -rh | awk 'NR==4{exit} {print $2}')
Предполагая, что ни одно имя каталога не содержит пробелов или каких-либо необычных символов.
Надежный подход: обрабатывая любое возможное имя файла (каталога), выводя имя каталога как NUL, разделенное в awk, и с помощью справки из xargs, чтобы иметь дело с каждым каталогом:
du -0hs */ | sort -zrh | awk 'BEGIN{RS="\0"} NR==4{exit} {printf("%s\0", $2)}' | \
xargs -0 ls -l
Каждое содержимое каталога за раз: [ ! d3]
du -0hs */ | sort -zrh | awk 'BEGIN{RS="\0"} NR==4{exit} {printf("%s\0", $2)}' | \
xargs -0 -I{} ls -l {}