Копирование файлов между серверами по времени создания
Мои знания bash-скриптинга очень слабые, поэтому я прошу помощи здесь. Какой сценарий bash наиболее эффективен по производительности для поиска и копирования файлов с одного сервера LINUX на другой, используя спецификации, описанные ниже.
Мне нужно получить скрипт bash, который находит только новые файлы, созданные на сервере A в каталогах с именем "Z" в интервале от 0 до 10 минут назад. Затем перенесите их на сервер B. Я думаю, что это можно сделать, отформатировав запрос и выполнив его для каждого найденного нового файла "scp /X/Y.../Z/file root @ hostname: / X / Y... / Z / "Если скрипт не находит такой удаленный путь на сервере B, он продолжит копирование второго файла, каталог которого существует. Файл должен быть скопирован с правами доступа, группой, владельцем и временем создания.
X / Y... это различные пути каталогов. Я хочу настроить работу cron для выполнения этого скрипта каждые 10 минут. Таким образом, производительность очень важна в этом случае.
Спасибо.
3 ответа
rsync может подойти для ваших нужд. Проверьте rsync перед тем, как вы напишите его плохую копию. В противном случае команда find может использоваться для поиска файлов по имени и возрасту, а затем выполнить команду scp для найденных файлов.
for d in $(find . -type d -name Z); do find $d -maxdepth 1 -type f -amin -10 -print0 | rsync -av --files-from=- --from0 ./ root@hostname:; done
rsync
это ваша лучшая ставка и будет наиболее оптимизированной. В частности, вы хотите, чтобы сохранить время с помощью -t
вариант, но -a
опция (архив, который включает в себя -t
) обычно лучшее место для начала. (Если вы используете Mac OS X, лучше также включить -E
возможность сохранить расширенные атрибуты и ветки ресурсов.) Прочитайте страницу руководства, проведите все тестирование с помощью -n
/--dry-run
чтобы не вносить никаких изменений на диск, и обратите внимание на то, как вы используете или пропускаете косые черты в именах каталогов при их изменении rsync
Поведение
К несчастью, find
не будет работать, поскольку реализация на большинстве платформ может сравнивать время только с гранулярностью "дня" (к сожалению, округлено), поэтому вы не сможете найти файлы, созданные за последние 10 минут.
Итак, ряд rsync
задания cron или скрипт, который выполняет все необходимое rsync
s ваш лучший выбор. Если у вас есть тонны небольших файлов, которые вы будете синхронизировать, 10 минут могут оказаться слишком коротким периодом времени, но все зависит от ваших конкретных наборов данных, поэтому проведите некоторое тестирование. Естественно, начальная синхронизация займет больше времени, поэтому выполните ее вручную перед планированием заданий cron.