Возникла необходимость автоматизации выполнения задачи по отправке файлов (папок с файлами) по условию их наличия в папке для отправки более 10 шт.
Реализацию данной задачи было решено возложить на скрипт bash, запускаемый через пользовательское задание cron.
Указанный ниже скрипт на bash действует по алгоритму:
1. Вычисляется число файлов в папке для отправки.
2. Полученное значение сравнивается с установленным значением 10.
3. Если в результате сравнения будет выяснено, что число файлов в папке для отправки больше 10, то запускается задание на отправку. Если выяснено, что число файлов 10 и менее, то задание на отправку не запускается. Отправка производится программой rclone.
В принципе, текст скрипта простой. Но особенность реализации заключается в том, что проверка условия вида
if [ $value2 -qt $value1 ]; then
здесь не работает, а работает
if (( $value2 > $value1 )); then
Поэтому текст скрипта будет следующим:
#!/bin/bash
log=место_файла_протокола/$(date '+%d').имя_файла.txt
sm=... # указывается путь к папке отправки
dm=... # указывается путь к папке получателя
# если файл протокола отсутствует, то он создаётся
if [ -f $log ]; then
:
else
> $log
fi
echo " " >> $log
find $sm -type f | wc -l > /tmp/files.txt
value1=10
value2=`cat /tmp/files.txt`
if (( $value2 > $value1 )); then
echo "$(date '+%H.%M.%S') -- файлов в папке – $value2" >> $log
# запуск задания на отправку файлов и папок с файлами через команду перемещения
echo " запуск задания отправки" >> $log
rclone move --delete-empty-src-dirs $sm $dm
echo "$(date '+%H.%M.%S') -- завершение задания отправки" >> $log
else
echo "$(date '+%H.%M.%S') -- отправка не произведена" >> $log
echo " файлов в папке – $value2" >> $log
fi
echo " " >> $log
exit
По сравнению с реально использующимся текст скрипта упрощён (за счёт отсутствия ряда операций, предшествующих отправке), но показывает общую реализацию поставленной задачи.
🔰 Дополнительные пояснения. Число пробелов с строках записи в протокол событий составляет 12, что объясняется желанием удобства чтения протокола, то есть помещать следующую запись текста прямо под предыдущей, например:
17.30.01 -- файлов в папке – 11
запуск задания отправки
17.31.19 -- завершение задания отправки
Для автоматического удаления удаления устаревших файлов протоколов можно использовать команду:
find место_файлов_протоколов -name "*.txt" -mtime +N -delete
N является числом полных суток, например 3. То есть, если с момента создания файла протокола прошло 72 часа и менее, то файл не удаляется, а вот если прошло 72 часа 1 минута и более, то файл уже подлежит удалению. Подробности можно прочитать здесь в комментариях 5 и 6.
Комментариев нет:
Отправить комментарий