1
0
Fork 0
bash_scripts/all_repo_list.sh

40 lines
2.8 KiB
Bash
Raw Normal View History

2025-02-13 16:17:05 +03:00
#!/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)) мс."