Поиск и сортировка файлов по размеру в Unix - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу создать функцию в программировании оболочки, которая получает 2 параметра, имя-каталога и имя-файла и выполняет следующие действия: выполняет поиск, начиная с заданного в имени-каталога имени файла, а затем переходит во все подкаталоги. имя каталога, чтобы продолжить поиск. Я хочу, чтобы выходные данные были для каждого родительского каталога, в котором было найдено имя файла, и отсортированы по размеру имени файла.

Помощь будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 01 апреля 2020

не знаю, о каком Unix вы просили, но для Linux и, возможно, распространенных Unix систем:

find <directory> -name "<filename>" -ls | sort -k 7 -n -r | awk '{print $NF}' | xargs -n 1 dirname
  • sort => сортировка по размеру файла (7-й столбец) вывода поиска - размер файла)
  • awk => напечатать полный путь к имени файла
  • dirname => получить родительский каталог для соответствующего файла

Пример:

# Find parent directory of all types.h under /usr/include, sorted by file size in desc order

$ find /usr/include/ -name "types.h" -ls | sort -k 7 -n -r | awk '{print $NF}' | xargs -n 1 dirname
/usr/include/x86_64-linux-gnu/bits
/usr/include/x86_64-linux-gnu/sys
/usr/include/c++/7/parallel
/usr/include/rpc
/usr/include/linux/sched
/usr/include/linux/iio
/usr/include/linux
/usr/include/asm-generic
/usr/include/x86_64-linux-gnu/asm
...