Как перечислить файлы из n крупнейших каталогов?

Мне интересно найти n самых больших подкаталогов (например, 3) в моем текущем каталоге И ТОГДА перечислять все файлы из них. Мне не интересно находить самые большие файлы. Я знаю, что существует множество решений для поиска больших файлов, и это не то, что я хочу.

Я нашел 3 самых больших подкаталога с линией:

$ du -hs */ | sort -rh | head -3

с результатом: [ ! d4]

212K    04/
52K     02/
20K     03/

, но каким-то образом я не могу перечислить файлы из этих каталогов (трубопровод с И THEN не работал). Любые предложения, как это сделать?

1
задан 29 March 2017 в 16:00

1 ответ

Подстановка команды с помощью 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 {}
4
ответ дан 23 May 2018 в 00:09
  • 1
    Я думаю, вам нужно начать с du -0 и sort -z, если вы хотите обрабатывать любое возможное имя файла, включая новые строки ... – ilkkachu 29 March 2017 в 16:59
  • 2
    @ilkkachu hehe..thanks..edited. – heemayl 29 March 2017 в 17:03
  • 3
    Я действительно задаюсь вопросом, будет ли (когда) будущая версия Ubuntu (или какого-то другого известного дистрибутива) начнет использовать патч ядра, который ограничивает возможные символы в именах файлов. – ilkkachu 29 March 2017 в 17:05

Другие вопросы по тегам:

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