Linux эквивалентен Robocopy?

34

Это довольно забавно, есть много способов, которыми инструменты командной строки Linux значительно превосходят инструменты Windows, но я не нашел эквивалента в Робокопии . Robocopy более универсален cp, и я не могу понять, как делать то, что я хочу, с помощью инструментов Linux.

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

Я попытался выяснить, как сделать это в Linux, возможно, на полчаса, решил, что мне, вероятно, придется изучать сценарии bash или что-то, чтобы делать то, что я хотел, и тогда я понял, что могу просто использовать robocopy. У меня также были некоторые другие требования. Я в основном конвертировал веб-сайт Python (Django) из репозитория SVN в репозиторий Git, и я хотел убедиться, что у меня не было внесенных изменений в SVN. Однако я хотел условно исключить .svnкаталоги и .pycскомпилированные файлы Python. Следующая команда robocopy делает именно то, что я хочу:

robocopy source destination /XO /E /XD .svn /XF *.pyc

Есть ли эквивалент Linux в Robocopy? Я rsyncкратко рассмотрел, но мне казалось, что мне нужно настроить сервер rsync, прежде чем пытаться синхронизировать папки.

Ибрагим
источник
1
Вам не нужно настраивать сервер rsync, rsync через ssh автоматически запускает rsync на удаленном компьютере в режиме сервера (таким образом, который используется только для этого соединения, работает под собственной учетной записью и автоматически закрывается, когда это будет сделано) ,
CesarB
«… Но мне показалось, что мне нужно настроить сервер rsync, прежде чем пытаться синхронизировать папки». Я использовал Rsync в течение многих лет и мне никогда не приходилось настраивать формальный сервер Rsync. На самом деле многие инструменты синхронизации / резервного копирования в macOS используют Rsync в качестве своего ядра без необходимости настройки сервера, такого как Carbon Copy Cloner и - я считаю - SuperDuper!
JakeGould

Ответы:

38

Похоже, что rsync - это то, что вам нужно. Вам не нужно настраивать rsync-сервер для копирования файлов с одного компьютера на другой. Rsync поддерживает копирование файлов через SFTP (SSH File Transfer), который уже включен большинством Linux-коробок (если не отключен вручную).

Посмотрите Зеркальные файлы Lifehacker's в системах с rsync для более подробной информации:

Rsync может выполнить эту задачу, независимо от того, хотите ли вы сделать резервную копию своих данных, безопасно распространять файлы или зеркально отразить ваши рабочие документы через Интернет из офиса в дом, между компьютерами в локальной сети или с вашего компьютера на веб-сервер. Сегодня мы будем использовать rsync для зеркалирования папок между Mac и ПК через безопасное соединение в командной строке.

Rsync является бесплатным (как в речи) и кроссплатформенным, то есть он синхронизирует файлы между операционными системами (Windows / Cygwin, Mac OS, Linux); он работает через ssh, поэтому он зашифрован и защищен; в отличие от FTP это инкрементальный , поэтому только части из измененных файлов передаются, а не целые файлы , что делает его идти как Speedy Gonzalez; и тот факт, что это командная строка делает его сценарием и легко автоматизировать.

Джош Хант
источник
Прочтите справочную страницу по rsync - чтобы использовать ssh (без явного сервера rsync), вы будете использовать "-e ssh"
Даг Харрис
1
Rsync это здорово! И вам не нужно использовать -e, так как любой путь, например user@host.com: / blah /, будет автоматически его использовать.
How-To Geek
Ммм, это круто. Таким образом, он может использовать в основном scpподобный синтаксис для передачи по SSH? На самом деле я пытался передать файлы на одну машину, но это хорошо знать.
Ибрагим
1
К сожалению, этот ответ не совсем корректен: хотя он использует SSH, он не использует SFTP. Вместо этого он связывается с удаленным экземпляром rsync напрямую, используя протокол rsync.
Даниэль Б
15

rsync будет копировать файлы из одного каталога в другой каталог на том же компьютере, что и robocopy. Вот команда rsync, которая эквивалентна вашей команде robocopy:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

Это рекурсивно скопирует источник в место назначения и исключит более старые файлы, а также каталоги / файлы '.svn' и '* .pyc'.

Шон Стаатс
источник
За исключением того, что это будет сделано в однопоточном режиме, что может привести к более чем 5-кратному снижению производительности в зависимости от степени косвенности в вашем решении для хранения данных.
Михаил,
Когда файл удаляется из источника, он не синхронизируется с местом назначения.
Цзиронг Ху