
Мне нужно найти самый большой файл в текущем и последующем каталоге. Я пробовал
ls -Rlh | awk '{print $3 " " $5 " " $9}'
но не знаю, нормально ли это, как отсортировать и выбрать самый большой файл.
решение1
ГНУfind
+sort
+head
решение (для любого уровня глубины каталога), предполагающее, что пути к файлам не содержат символов новой строки:
find . -type f -printf "%s %p\n" | sort -nr | head -1
%s
- спецификатор формата, указывающий на размер файла (в байтах)%p
- спецификатор формата, указывающий на имя файлаsort -nr
- сортировать записи по номерам в обратном порядкеhead -1
- распечатать первую строку/запись TOP
Чтобы получитьчеловек читаемыйзначение размера файла — расширьте конвейер с помощью numfmt
команды GNU (если поддерживается):
find . -type f -printf "%s %p\n" | sort -nr | head -1 | numfmt --to=si
решение2
С zsh
, для самого большого обычного файла:
ls -ld -- **/*(.DOL[1])
(конечно, вы можете заменить ls -ld --
любой командой. Если вы используете GNU ls
или совместимую, см. также -h
опциюразмеры, удобные для восприятия человеком)
.
: толькообычныйфайлы (не каталоги, символические ссылки, устройства, fifo...)D
: включить скрытые и перейти в скрытые каталогиOL
: в обратном порядке по размеру (L
ength).[1]
: только первое совпадение.
Если есть ничьё, вы получите любое из них наугад. Если вы хотите первое в алфавитном порядке, добавьте дополнительный on
( o
rder by n
ame), чтобы отсортировать ничьё в алфавитном порядке.