#!/bin/bash echo "Создание списков свойств для файлов каждого каталога." #-----------------------------------------------------------------------------------------------; prompt="Подтверждение (да/нет): " && read -erp "$prompt" line && echo -ne "\033[1A$prompt\033[K" case "${line,,}" in y | yes | д | да) echo "ПОДТВЕРЖДЕНИЕ" ;; *) echo "ОТМЕНА" && exit 0 ;; esac #-----------------------------------------------------------------------------------------------; time_ms="$(date '+%s%3N')" #-----------------------------------------------------------------------------------------------; # переводим размеры файла в человеко-читаемую строку, добавляем пробел и отбрасываем нули из дробной части function BKM { numfmt --to=iec --format="%.2f" --suffix="B" "$(tee)" | sed -r 's|,{,1}0{,2}([BKM])| \1|'; } #-----------------------------------------------------------------------------------------------; # дописываем размеры файла и время звучания function append_size_time { file_size="$1;$(stat --printf="%s" "$1" | BKM)" case "${1##*.}" in "mp3") echo "$file_size / $(mp3info -p "%m:%02s" "$1")" ;; *) echo "$file_size" ;; esac } #-----------------------------------------------------------------------------------------------; # получаем список файлов и сохраняем этот список в файл function repo_list { cd "$1" || return 1 echo "Создание списка файлов: $1" # запуск параллельной обработки файлов репозитория и сохранение результатов в массив readarray -t repo_list < <(find . -type f -not -name '*.log' -not -path "*/.*" \ -printf 'append_size_time "%p"\0' | xargs -n1 -0 -P0 bash -c) # вывод строк массива, сортировка и сохранение в файл printf '%s\n' "${repo_list[@]}" | LC_COLLATE=C sort -r >"$basedir/repo_list/$1.txt" echo "Создан файл: $1.txt" } #-----------------------------------------------------------------------------------------------; export -f repo_list append_size_time BKM export basedir="$PWD" cd .. # выход из репозитория # запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea" find . -mindepth 1 -maxdepth 1 -type d -not -name '.idea' -printf 'repo_list "%f"\0' | xargs -n1 -0 -P0 bash -c #-----------------------------------------------------------------------------------------------; echo "Общее время выполнения: $(($(date '+%s%3N') - time_ms)) мс."