From 49267f5a658fdc1a1fa0443262da4437265ccf8a Mon Sep 17 00:00:00 2001 From: golovin Date: Thu, 13 Feb 2025 16:17:05 +0300 Subject: [PATCH] 2,83 KB --- all_repo_list.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 all_repo_list.sh diff --git a/all_repo_list.sh b/all_repo_list.sh new file mode 100755 index 0000000..29c3b2f --- /dev/null +++ b/all_repo_list.sh @@ -0,0 +1,39 @@ +#!/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)) мс."