Самым простым решением, вероятно, является использование таймера, который запускается каждый день и проверяет, наступит ли завтра 1-е число месяца. Примерно так:
mytimer.timer:
[Unit]
Description=run mytimer.service daily at 6am
[Timer]
OnCalendar=6:00
Persistent=true
[Install]
WantedBy=timers.target
mytimer.service:
[Unit]
Wants=mytimer.timer
Description=run on last day of month
[Service]
Type=oneshot
ExecStart=/bin/bash -c '[ $(date --date=tomorrow +%d) -eq 1 ] && \
/bin/myscript'
Последний рабочий день месяца я рассчитываю следующим образом: посмотрите на 3 дня в будущем и проверьте, является ли дата третьим и день - с четверга по понедельник включительно, либо дата - 1-е или 2-е, а день - понедельник. Эквивалентный тест bash с использованием даты и% w для дня недели (0 = воскресенье) будет выглядеть так:
[[ $(date --date=+3days +%d%w) =~ 03[45601]|011|021 ]]
Возможно, вы используете псевдоним для rsync
, который включает noglob
? Некоторые фреймворки конфигурации оболочки устанавливают это за вас (например, prezto для zsh). Я испытал такое же поведение, вы можете либо:
unalias rsync
) / usr / bin / rsync [etc.]
, возможно) команду rsync [etc.]
, чтобы обойти ее.
Чтобы скопировать папку в другую с помощью rsync
, просто выполните
rsync -a /source/folder/path/ /destination/folder/path/
В вашем случае
rsync -a "$folder64/Pictures/" "$folder65/Pictures/"
Важным является замыкающий /
источник.
При использовании $folder64/Pictures/*
возможно, что вы не копируете содержимое отдельной папки, поскольку аргументы командной строки расширяются до списка элементов в исходной папке, соответствующих шаблону подстановки имени файла *
, и это обычно не соответствует скрытым файлам или папкам.
В вашем конкретном случае вы получаете сообщение об ошибке «Нет такого файла или каталога». Это означает, что каталог, который вы указали в качестве источника, просто не существует или пуст. Если он пуст, это приводит к тому, что *
остается нерасширенным, и rsync
не может найти данный файл (с именем*
)для синхронизации.