4,46 KB
This commit is contained in:
parent
cf8d2cb5da
commit
2e8445bd0e
1 changed files with 51 additions and 0 deletions
51
creativity.sh
Executable file
51
creativity.sh
Executable file
|
@ -0,0 +1,51 @@
|
|||
#!/bin/bash
|
||||
echo "Создание уменьшенных копий изображений 'jpg' в каталогах 'creativity*'."
|
||||
#-----------------------------------------------------------------------------------------------;
|
||||
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')" # текущее время в миллисекундах
|
||||
#-----------------------------------------------------------------------------------------------;
|
||||
# файл-отчёт о завершении работы функции, удаление старого файла
|
||||
export logfile="$PWD/logs/creativity.log" && rm -f "$logfile"
|
||||
#-----------------------------------------------------------------------------------------------;
|
||||
# обработка изображений
|
||||
function graphics_magick {
|
||||
dir="$2" && file="${3%.*}.webp"
|
||||
folder="${dir/full-size/preview}"
|
||||
# уменьшение размеров изображения — не более 500 пикселей по горизонтали
|
||||
gm convert "$dir/$3" -resize 512!x\> -strip -quality 90% "$folder/$file" &>>/dev/null
|
||||
# отчёт о завершении выполнения функции
|
||||
echo "$dir/$3" >>"$logfile"
|
||||
# соответствующая строка для текущего каталога
|
||||
pre="\e[${1}A" && aft="\e[K\e[${1}B\r"
|
||||
# массив общего количества файлов и цвета для его отображения
|
||||
read -ra array <<<"$count" && green="\e[92m" && norm="\e[0m"
|
||||
# текущее значение и общее значение для текущего каталога и для всех каталогов
|
||||
current_dir="$(grep -c "^$dir" "$logfile")" && total_dir="${array[$1]}"
|
||||
current_all="$(grep -c "." "$logfile")" && total_all="${array[0]}"
|
||||
[ "$current_dir" == "$total_dir" ] && file="${dir}" || file="${dir}/$3"
|
||||
[ "$current_dir" == "$total_dir" ] && c1="$green" || c1="$norm"
|
||||
[ "$current_all" == "$total_all" ] && c2="$green" || c2="$norm"
|
||||
printf "${pre}Обработано: [${c1}%d/%d${norm}] %s${aft}" "$current_dir" "$total_dir" "$file"
|
||||
printf "Всего обработано файлов: [${c2}%d/%d${norm}]\r" "$current_all" "$total_all"
|
||||
}
|
||||
export -f graphics_magick
|
||||
cd .. # выход из репозитория
|
||||
# поиск всех каталогов "full-size" репозиториев "creativity*", сортировка и добавление порядковых номеров для строк
|
||||
readarray -t folders < <(find . -type d -path "*creativity*/full-size" -printf '%p\n' | sort -r | grep -n '\S')
|
||||
export count # строка-массив общего количества изображений "jpg" в каждом каталоге "full-size" для дочерних процессов
|
||||
count="$(printf 'find %s -type f -name "*.jpg" | wc -l\0' "${folders[@]#*:}" | xargs -n1 -0 bash -c | tr '\n' ' ')"
|
||||
# общее количество файлов во всех каталогах "full-size"
|
||||
count="$(echo "$count" | numsum -r) $count"
|
||||
# смещение курсора вниз на соответствующее количество строк
|
||||
printf 'Каталог: %s\n' "${folders[@]#*:}" | sort
|
||||
# строка замены путей для каталогов "full-size" на такие же с порядковыми номерами
|
||||
replace="sed $(printf "%s\n" "${folders[@]}" | sed -E "s/(.+):(.+)/-e 's|\"\2\"|\"\1\" \"\2\"|g'/" | tr '\n' ' ')"
|
||||
# запуск параллельной обработки изображений "jpg" в каталогах "full-size" репозиториев "creativity*"
|
||||
find . -type f -path "*creativity*/full-size*" -name "*.jpg" \
|
||||
-printf 'graphics_magick "%h" "%f"\0' | eval "$replace" | xargs -n1 -0 -P0 bash -c
|
||||
#-----------------------------------------------------------------------------------------------;
|
||||
# замер продолжительности выполнения в миллисекундах, пересчёт в минуты, секунды и миллисекунды
|
||||
tms="$(($(date '+%s%3N') - time_ms))" && min="$((tms / 1000 / 60))" && sec="$((tms / 1000 % 60))"
|
||||
ms="$((tms % 1000))" && printf '\nОбщее время выполнения: %02d:%02d.%03d мс.\n' "$min" "$sec" "$ms"
|
Loading…
Add table
Reference in a new issue