Мне нужно реплицировать папку по очень медленной ссылке в несколько мест назначения.
В настоящее время я создаю текстовый файл с помощью find.
find "$sourcedir" -exec ls -la {} \; > "$statefile"
Затем я сравниваю его с предыдущим файлом, созданным таким же образом, чтобы определить, должен ли сценарий выйти или выполнить несколько rsync. В конце концов, новый файл состояния становится старым файлом состояния для следующего запуска скрипта.
if ! diff "$statefile" "$statefile".old
Есть ли лучший способ минимизировать использование ресурсов в источнике? (Совместимо с bash в Debian.)
Должен ли я просто запустить первый rsynd, а после изменений сделать все остальное? Как узнать, действительно ли rsync изменил какие-либо файлы после первого rsync?
Вы хотите уменьшить ресурсы, используемые командами find, ls и diff? Думаю, для этого должно быть огромное количество файлов ...
Очевидно, вы можете сэкономить много вызовов ls, используя -exec ... +
вместо того -exec ... ;
. И вы можете вообще отказаться от ls, поскольку он ничего не может найти не может сам. Вы можете сгенерировать файл со значениями printf для find, создав более или менее тот же результат. Но: Ни ls, ни find не обнаруживают определенных изменений ACL и расширенных атрибутов.
Совершенно другой подход: FAM (File Alteration Monitor). Вы позволяете ядру сказать вам (например, через fileschanged
) что (возможно) изменилось.
Еще один совет: что-то вроде rdiff-backup должно требовать меньше пропускной способности, чем rsync, потому что