Назад | Перейти на главную страницу

Копирование файлов между серверами по времени создания

Мои знания сценариев bash очень слабы, поэтому я прошу здесь помощи. Какой сценарий bash является наиболее эффективным с точки зрения производительности для поиска и копирования файлов с одного сервера LINUX на другой, используя спецификации, описанные ниже.

Мне нужно получить сценарий bash, который находит только новый файлы, созданные на сервере A в каталогах с именем "Z" в интервале от 0 до 10 минут назад. Затем перенесите их на сервер B. Я думаю, это можно сделать, отформатировав запрос и выполнив его для каждого созданного нового файла "scp /X/Y.../Z/file root @ hostname: / X / Y ... /" Z / "Если сценарий не находит такого удаленного пути на сервере B, он продолжит копирование второго файла, каталог которого существует. Файл должен быть скопирован с указанием разрешений, группы, владельца и времени создания.

X / Y ... - путь к различным каталогам. Я хочу настроить задание cron для выполнения этого скрипта каждые 10 минут. Так что производительность в этом случае очень важна.

Спасибо.

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 или скрипт, который выполняет все необходимые rsyncs - ваш лучший выбор. Если у вас есть тонны малых файлов, которые вы будете синхронизировать, 10 минут может оказаться слишком коротким периодом времени, но все зависит от ваших конкретных наборов данных, поэтому проведите небольшое тестирование. Естественно, первоначальная синхронизация займет больше времени, поэтому выполняйте ее вручную перед планированием заданий cron.