Intereting Posts
Ограничение POSIX зависит от конкретной глубины? Аккумуляторная клавиатура для ноутбука Toshiba X775-3DV78 невозможно подключить ftp в режиме паузы sed – удалить последнее вхождение строки (запятой) в файл? Беспроводная связь в Debian Squeeze Резервное копирование на диск Amazon Cloud Как копировать разрешения от владельца другим пользователям с помощью `chmod`? Попытка двойного загрузочного linux с окнами, не позволяя мне загрузиться в Почему fstrim, похоже, не обрезает блоки данных на btrfs (+ ecrypts)? Раздел процессора в vmstat Как безопасно входить в базу данных через скрипт? Редактирование nsswitch.conf для проверки файлов, отличных от / etc / passwd, при поиске локальных файлов для деталей пользователя Как избежать того, что редактор Geany изменяет владельца файла при его редактировании? Разрешение системной зависимости от Amazon Linux для установки RabbitMQ Какая версия X представила функцию Y?

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

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

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 {} \;