Last active
October 13, 2024 04:00
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Пример запуска: ./repeat.sh --task task.md --every month