Skip to content

Instantly share code, notes, and snippets.

@eldaroid
Last active October 13, 2024 04:00
Show Gist options
  • Save eldaroid/f8f4824d3275fe0a696defd59cdbe3fa to your computer and use it in GitHub Desktop.
Save eldaroid/f8f4824d3275fe0a696defd59cdbe3fa to your computer and use it in GitHub Desktop.
RU: Скрипт на Bash создаёт копии указанного markdown-файла задачи, обновляя в них дату с заданной периодичностью (неделя, месяц или год) на несколько лет вперёд. EN: The Bash script creates copies of the specified markdown file of a task, updating the date in them with a specified periodicity (week, month or year) for several years ahead
#!/bin/bash
# Проверка наличия аргументов
if [ $# -eq 0 ]; then
echo "Неправильное использование скрипта. Корректный формат: ./repeat.sh --task task.md --every week|month|year"
exit 1
fi
# Проверка первых двух аргументов
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Неизвестный параметр: $1 или $2. Используйте '--task task.md --every week|month|year'"
exit 1
fi
# Присвоение аргументов переменным
ARG1="$1"
TASK_FILE="$2"
ARG3="$3"
EVERY="$4"
# Проверка корректности первого аргумента
if [ "$ARG1" != "--task" ]; then
echo "Неизвестный параметр: $ARG1. Используйте '--task task.md --every week|month|year'"
exit 1
fi
# Проверка существования файла задачи
if [ ! -f "$TASK_FILE" ]; then
echo "Файл $TASK_FILE не найден."
exit 1
fi
# Проверка наличия и корректности третьего и четвёртого аргументов
if [ -z "$ARG3" ] || [ -z "$EVERY" ]; then
echo "Неизвестный параметр: $ARG3 или $EVERY. Используйте '--task task.md --every week|month|year'"
exit 1
fi
if [ "$ARG3" != "--every" ]; then
echo "Неизвестный параметр: $ARG3. Используйте '--task task.md --every week|month|year'"
exit 1
fi
if [ "$EVERY" != "week" ] && [ "$EVERY" != "month" ] && [ "$EVERY" != "year" ]; then
echo "Неизвестный параметр: $EVERY. Используйте '--task task.md --every week|month|year'"
exit 1
fi
# Извлечение даты из файла задачи
DATE=$(grep 'Дата:' "$TASK_FILE" | cut -d' ' -f2)
if [ -z "$DATE" ]; then
echo "Не удалось найти дату в файле $TASK_FILE"
exit 1
fi
# Проверка формата даты
if ! date -j -f "%Y-%m-%d" "$DATE" +"%Y-%m-%d" >/dev/null 2>&1; then
echo "Дата в файле $TASK_FILE имеет неверный формат. Ожидается YYYY-MM-DD"
exit 1
fi
# Определение количества повторений
if [ "$EVERY" == "week" ]; then
COUNT=52 # 1 год (52 недели)
elif [ "$EVERY" == "month" ]; then
COUNT=24 # 2 года
elif [ "$EVERY" == "year" ]; then
COUNT=5 # 5 лет
fi
# Цикл создания новых файлов с обновленными датами
for ((i=1; i<=$COUNT; i++)); do
if [ "$EVERY" == "week" ]; then
NEWDATE=$(date -j -v+${i}w -f "%Y-%m-%d" "$DATE" +"%Y-%m-%d")
elif [ "$EVERY" == "month" ]; then
NEWDATE=$(date -j -v+${i}m -f "%Y-%m-%d" "$DATE" +"%Y-%m-%d")
elif [ "$EVERY" == "year" ]; then
NEWDATE=$(date -j -v+${i}y -f "%Y-%m-%d" "$DATE" +"%Y-%m-%d")
fi
# Создание имени нового файла
BASENAME=$(basename "$TASK_FILE" .md)
NEWFILE="${BASENAME}_${NEWDATE}.md"
# Копирование и обновление даты в новом файле
sed "s/Дата: .*/Дата: $NEWDATE/" "$TASK_FILE" > "$NEWFILE"
echo "Создан файл $NEWFILE с датой $NEWDATE"
done
@eldaroid
Copy link
Author

eldaroid commented Oct 7, 2024

Пример запуска: ./repeat.sh --task task.md --every month

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment