Поиск рекурсивно большого файла

Я пытаюсь найти самый большой файл в каталоге рекурсивно. Если внутри этого каталога есть подкаталог, функция должна находиться внутри этого каталога и проверять, существует ли самый большой файл. Как только самый большой файл найден, вывод отображается с относительным именем пути и именем и размером самого большого файла.

EX:

dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test class/asn dude.h.gch: 9481628 

Это то, что у меня есть:

 #!/bin/sh clear recursiveS() { for d in *; do if [ -d $d ]; then (cd $d; echo $(pwd)/$line; du -a; recursiveS;) fi done } recursiveS 

Некоторое время я застрял. Я не могу реализовать это путем конвейерной обработки ряда существующих инструментов Unix. Любые идеи были бы хороши!

используйте find для вывода имен файлов с размером файла. Сортировать. распечатайте самую большую.

 find . -type f -printf "%s\t%p\n" | sort -n | tail -1 

«Чистое» решение bash

 shopt -s globstar max_s=0 for f in **; do if [[ -f "$f" ]]; then size=$( stat -c %s "$f" ) if (( $size > $max_s )); then max_s=$size max_f=$f fi fi done echo "$max_s $max_f" 

Это будет значительно медленнее, чем решение поиска.

Это работает на BSD / macOS:

 find . -type f -ls | sort -k7 -r 

Вы также можете добавить | head -n 3 | head -n 3 чтобы отобразить число интересных записей (в этом случае 3).

Эта команда также позволяет отобразить определенный размер.

 find . -type f -size +100M -exec ls -lh {} \;