Задание Cron для перемещения каталогов старше 24 часов
Ну, то, что я хочу сделать, это
- Крон должен запускаться каждый час или около того
- Он должен переместить каталоги в папке /disk1/data/ старше 24 часов в /disk2/data/
- Перемещаемые каталоги должны содержать все данные (файлы / папки) внутри них
Я новичок в работе cron, поэтому я абсолютно не знаю, с чего начать. Спасибо за любую помощь!
2 ответа
Что именно вы подразумеваете под возрастом каталога? Время с момента создания своего инода? Я предлагаю вам использовать find
определить каталоги, которые вы хотите переместить. Например, вот так:
#!/bin/bash
res=0
cd /disk1/data/
find -type d -ctime +1 -print0 -prune | \
while IFS= read -r -d '' i; do
if [[ ${i} == */* ]]; then # need to ensure subdir exists
if ! mkdir -p "/disk2/data/${i%/*}; then # error creating dir?
res=1
continue
fi
fi
rm -rf "/disk2/data/${i}" # make sure target does not exist
mv "${i}" "/disk2/data/${i}" # move stuff
done
exit ${res}
Если бы другим людям было разрешено писать disk2
, тогда этот код может быть уязвим для некоторых видов атак по символическим ссылкам, если кто-то создает правильные символические ссылки достаточно быстро. Точно сказать не могу.
Я предлагаю вам написать скрипт в какой-нибудь файл и выполнить его из cronjob. Вы создаете конобу с crontab -e
(убедитесь, что вы установили свой EDITOR
переменная среды), следуя формату, описанному в man crontab
,
Обратите внимание, что -ctime
вариант find
не означает время создания, но "время смены инода". Поле st_ctime
изменяется путем записи или путем установки информации об узле (владелец, группа, количество ссылок, режим и т. д.). Для каталогов это также будет отражать последний раз, когда файл (или подкаталог) был создан или удален в этом каталоге. Итак, рассмотрим ли find -type d -ctime +1
действительно вариант, который вам требуется.