2015-11-24 4 views
0

У меня есть сервер, на котором файлы передаются через FTP в локацию. Все файлы находятся с момента начала передачи (январь 2015 г.). Я хочу создать новый сервер и перенести файлы с места первого сервера. В принципе, мне нужно задание cron для запуска scp и переноса только новых файлов с момента последнего запуска.Linux - копирование только новых файлов с одного сервера на другой

Соединение между серверами с ssh работает, и я могу передавать файлы без рестрима между серверами. Как я могу достичь этого в Ubuntu?

Возможный дубликат с другим вопросом не стоит, потому что на моем целевом сервере у меня будет только один файл, где я должен сохранить дату последнего запуска cron, и файлы, которые будут скопированы с первого сервера, будут проанализированы и впоследствии удаляется.

rsync просто удостоверится, что все файлы существуют на обоих серверах, правильно?

+3

Использования [ 'rsync'] (HTTP://linux.die.net/man/1/rsync). – fedorqui

+0

@fedorqui: добавлено дополнительное объяснение, почему мне не нужны серверы для синхронизации. Спасибо! – HTB222

+0

ОК! [Открыто сообщение] (http://stackoverflow.com/posts/33894426/revisions) – fedorqui

ответ

0

мне удается задания хрон на удаленном компьютере настройки, используя следующие:

Я создал первый файл временной метки, которая будет держать последнюю метку времени, когда хрон пробег:

touch timestamp 

Тогда я скопировать все файлы с командами SSH и SCP:

ssh [email protected] find <files_path> -type f -newer timestamp | xargs -i scp -i [email protected]:'{}' <local_path> 

Затем я прикасаюсь файл временной метки с новым модифицированным время:

touch -m timestamp 

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

Позже изменения: Чтобы быть уверенным, что не существует разрыва между отметкой времени файлом и фактическим запуском из-за длительность команды SSH, сценарий был изменен на:

touch timestamp_new 
ssh [email protected] find <files_path> -type f -newer timestamp | xargs -i scp -i [email protected]:'{}' <local_path> 
rm -rf timestamp 
mv timestamp_new timestamp 
+0

У меня есть предложение. Как создать временную метку с использованием метки времени последнего файла в качестве ссылки? Предположим, что временная метка последнего файла - 1:00 вечера, а timestamp - 1pm, даже если ваш cron занял более 10 минут, чтобы скопировать все файлы и в итоге появилось больше файлов, добавленных после 1:00 вечера. Попробуйте 'touch -r ** lastfile в качестве ссылки **' – alvits

+0

@alvits: спасибо! Это то, что я сделал, я собирался опубликовать его, но несколько иначе. Перед ssh я создаю новый файл touch timestamp_new. В конце ssh я удаляю временную метку и изменяю время timestamp_new на отметку времени. – HTB222

+0

Использование последнего файла как рекомендации будет более точным, не так ли? В вашем методе вы могли бы скопировать файлы, которые уже были скопированы, если файл timestamp старше последнего скопированного файла. – alvits

Смежные вопросы