Список 20 самых больших файлов в определенном каталоге

Вот еще один способ. Первая часть выражения sed захватывает каждый символ, а затем заменяет его символом и амперсандом. Вторая часть удаляет амперсанд с конца строки.

echo 12345 | sed -r 's/(.)/\1\&/g;s/\&$//g'
1&2&3&4&5

Работает и с многобайтовыми символами.

1
20.11.2019, 01:14
2 ответа
find dir/ -type f -exec du -a {} + | sort -nr | head -n 20
3
27.01.2020, 23:29

В оболочке zshшаблон подстановки

/dir/**/*(.DOL[1,20])

будет расширяться до пути к 20 самым большим файлам в каталоге или ниже него/dir(со скрытыми именами, которые также будут учитываться, а символически связанные файлы будут игнорироваться ).

Части квалификатора glob (.DOL[1,20])означают:

  • .:Рассматривайте только обычные файлы.
  • D:Также рассмотрите файлы со скрытыми именами (подобно эффекту dotglobвbash).
  • OL:Упорядочить результат в порядке убывания размера файла(O= убывающий порядок, а не o= возрастающий; L= "длина" ).
  • [1,20]:Возвращает 20-й первый элемент, до которого расширяется глобус.

Шаблон **соответствует «рекурсивно», поэтому /dir/**/*сам по себе будет соответствовать любому имени в каталоге /dirили ниже него.

Использование сls:

ls -l -f /dir/**/*(.DOL[1,20])

Вам нужно будет использовать -fс ls, чтобы остановить сортировку отображаемого списка.

Или для вызова duфайлов:

du /dir/**/*(.DOL[1,20])
1
27.01.2020, 23:29

Теги

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