определить, если что-то было изменено в каталоге, и, если это так, сделать резервную копию - в противном случае ничего не делать - PullRequest
2 голосов
/ 08 октября 2010

У меня есть каталог «Данные», который я периодически пересылаю на удаленный NAS через сценарий оболочки.

Однако я хотел бы сделать это более эффективным.Я хотел бы определить, изменилось ли что-то в «Data» перед запуском rsync.Это сделано для того, чтобы я не разбудил диски на NAS без необходимости.

Я думал об изменении сценария оболочки, чтобы получить самое последнее время изменения файлов в данных (с помощью рекурсивного поиска),и записывать это в файл каждый раз, когда данные синхронизируются.

Перед каждой синхронизацией сценарий оболочки может сравнивать текущую временную метку «Данные» с предыдущей временной меткой, когда была синхронизирована «Данные».Если текущая временная метка новее, то rsync, в противном случае ничего не делать.

Мой вопрос: есть ли более эффективный способ выяснить, изменился ли каталог «Данные» со времени последней rsync? Обратите внимание, что в Data есть много-много слоев подкаталогов.

Ответы [ 3 ]

5 голосов
/ 08 октября 2010

Если я правильно понимаю, вы просто хотите посмотреть, были ли какие-либо файлы изменены, чтобы вы могли выяснить, следует ли переходить к части rsync вашего скрипта?

Это довольно простая задача, когдаданные были синхронизированы в последний раз, особенно если вы делаете это ночью.Как только вы обнаружите, что один файл с mtime больше, чем время последней синхронизации, вы знаете, что должны перейти к полной rsync.

find имеет эту встроенную функциональность:

# find all files modified in the last 24 hours
find -mtime 1
3 голосов
/ 08 октября 2010

Я бы использовал команду find, но сделал бы это следующим образом: при запуске rsync коснитесь файла, например «rsyncranflag».Затем вы можете запустить

find Data -newer rsyncranflag

Это будет точно определять, были ли какие-либо файлы изменены с момента последней rsync (при условии точности mtime).1007 *

3 голосов
/ 08 октября 2010

Rsync уже делает это. Не существует решения по требованию, которое не требует проверки свойств intime для mtime и ctime.

Однако вы можете создать демон, который использует inotify для отслеживания изменений по мере их возникновения и запускает rsync через определенные промежутки времени или всякий раз, когда вы чувствуете, что произошло достаточно событий, чтобы оправдать вызов rsync.

...