четверг, 20 января 2022 г.

Выполнение действий по условию – если число файлов больше 10


Возникла необходимость автоматизации выполнения задачи по отправке файлов (папок с файлами) по условию их наличия в папке для отправки более 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.

Комментариев нет:

Отправить комментарий