скрипт для перемещения папки в зависимости от даты изменения

первый пост. Предыстория. Моя жена - фотограф, она делает много снимков и сохраняет их на диск (mnt / STStorage), пока редактирует их, но после этого никогда не очищает их. У меня есть диск, на который я хотел бы переместить папки в зависимости от даты изменения. (/ Mnt / LTStorage). Нужна помощь со сценарием, который я могу добавить к заданию cron для выполнения один раз в день 30 1 * * * Я бы хотел, чтобы сценарий ..

  1. Проверьте / mnt / STStorage / root на дату последнего изменения и, если старше 14 дней, переместите эту папку и все в ней в / mnt / LTStorage /, сохранив то же имя папки.
  2. Затем напишите, что было перемещено в / mnt / STStorage /, чтобы мы знали, что было перемещено, и отправьте мне по электронной почте журнал перемещенных папок.

ОС CentOS 6.4

вот что у меня есть, думаю, это может сработать сейчас. Может быть чище.

#/bin/bash
dt=$(date +%Y.%m.%d) 
From="/mnt/STStorage/"
To="/mnt/LTStorage/"

if [[ ! -d "$To" ]]; then
mkdir -p "$To"
fi

cd "$From"
for i in "$@"; do
find . -type d -mtime +14 -exec mv "{}" "$To" \; > "$From"/Moved."$dt".txt

uuencode "$From"/Moved."$dt".txt "$From"/Moved."$dt".txt | mail -s "Files Moved"
[email protected]
done

Затем я добавлю это в crontab, чтобы запускать его раз в день.


person chip    schedule 11.06.2013    source источник
comment
Вы можете добавить параметр подробного режима в mv. Сделай это - find . -type d -mtime +14 -exec mv -v "{}" "$To" \;   -  person jaypal singh    schedule 11.06.2013
comment
как я могу записать вывод -v в журнал и сохранить в / mnt / STStorage, а также отправить его по электронной почте? Я тестировал -v, и он распечатывает файл и место его перемещения на терминале   -  person chip    schedule 11.06.2013
comment
добавил это в ответ. Я не утверждаю, что это лучший подход. Но, по крайней мере, у вас есть что поиграть и настроить в соответствии с вашими потребностями, например, добавить дату в файлы журнала и т. Д.   -  person jaypal singh    schedule 11.06.2013


Ответы (1)


Вы можете использовать -exec вместе с find. Что-то вроде:

find /mnt/STStorage/ -type d -mtime +14 -exec mv {} /mnt/LTStorage/ \;
  • -type d обеспечит перемещение только каталогов.

Другой вариант - использовать xargs

 find /mnt/STStorage/ -type d -mtime +14 | xargs -I '{}' mv {} /mnt/LTStorage/

Обновлять:

Чтобы добавить то, что перемещается, вы можете установить параметр режима verbose для mv

find /mnt/STStorage/ -type d -mtime +14 -exec mv -v {} /mnt/LTStorage/ \;

Так как это распечатает все по стандарту. Вы можете перенаправить его в файл журнала.

find /mnt/STStorage/ -type d -mtime +14 -exec mv {} /mnt/LTStorage/ \; > /mnt/STStorage/log.file

Для отправки по электронной почте вы можете сделать что-то вроде -

uuencode /mnt/STStorage/log.file /mnt/STStorage/log.file | mail -s "this is my subject line" [email protected]
person jaypal singh    schedule 11.06.2013
comment
Спасибо, это подтолкнуло меня к правильному пути. есть еще вопросы после моего обновленного кода выше. - person chip; 11.06.2013
comment
Спасибо, до сих пор он работает правильно, просто нужно добавить к нему электронное письмо. Могу ли я использовать что-то вроде && в конце сохранения файла журнала? - person chip; 11.06.2013
comment
После создания файла журнала добавьте эту команду в следующую строку uuencode "$From"/Moved."$dt".txt "$From"/Moved."$dt".txt | mail -s "Whatever Subject" [email protected] - person jaypal singh; 11.06.2013