67 lines
1.7 KiB
Bash
Executable file
67 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
# Проверка аргументов
|
||
if [ "$#" -lt 2 ]; then
|
||
echo "Использование: $0 <кол-во задач> <номера задач...>"
|
||
exit 1
|
||
fi
|
||
|
||
count=$1
|
||
shift
|
||
tasks=("$@")
|
||
|
||
if [ "${#tasks[@]}" -ne "$count" ]; then
|
||
echo "Ошибка: количество задач не совпадает с указанным числом"
|
||
exit 1
|
||
fi
|
||
|
||
# Папка назначения
|
||
dest_dir="./dist/Krivoruchenko_SK"
|
||
mkdir -p "$dest_dir" || { echo "Не удалось создать $dest_dir"; exit 1; }
|
||
|
||
# Для отката, если что-то пойдёт не так
|
||
copied_files=()
|
||
|
||
cleanup_and_exit() {
|
||
echo "Ошибка: $1"
|
||
echo "Удаляю скопированные файлы..."
|
||
for file in "${copied_files[@]}"; do
|
||
rm -f "$file"
|
||
done
|
||
exit 1
|
||
}
|
||
|
||
replace_in_file() {
|
||
local file="$1"
|
||
local num="$2"
|
||
|
||
sed -i -E "s|([\"'])solve\.h\1|\1solve_${num}.h\1|g" "$file"
|
||
}
|
||
|
||
# Проход по задачам
|
||
for num in "${tasks[@]}"; do
|
||
folder=$(printf "%02dEx" "$num")
|
||
if [ ! -d "$folder" ]; then
|
||
cleanup_and_exit "Папка $folder не найдена"
|
||
fi
|
||
|
||
for file in main.c solve.c solve.h; do
|
||
src="$folder/$file"
|
||
if [ ! -f "$src" ]; then
|
||
cleanup_and_exit "Файл $src не найден"
|
||
fi
|
||
|
||
base="${file%.*}"
|
||
ext="${file##*.}"
|
||
dest_file="$dest_dir/${base}_${folder:0:2}.$ext"
|
||
|
||
cp "$src" "$dest_file" || cleanup_and_exit "Ошибка копирования $src"
|
||
copied_files+=("$dest_file")
|
||
if [[ "$file" == "main.c" || "$file" == "solve.c" ]]; then
|
||
replace_in_file "$dest_file" "${folder:0:2}"
|
||
fi
|
||
done
|
||
done
|
||
|
||
echo "Все файлы успешно скопированы в $dest_dir"
|
||
|