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

49078
Ibrahim

Это довольно забавно, есть много способов, которыми инструменты командной строки 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 

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

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

2 ответа на вопрос

37
Josh Hunt

Похоже, что 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" Doug Harris 15 лет назад 0
Rsync это здорово! И вам не нужно использовать -e, так как любой путь, например user@host.com: / blah /, будет автоматически его использовать. The How-To Geek 15 лет назад 1
Ммм, это круто. Так что он может использовать в основном `scp`-подобный синтаксис для передачи по ssh? На самом деле я пытался передать файлы на одну машину, но это хорошо знать. Ibrahim 15 лет назад 0
К сожалению, этот ответ не совсем корректен: хотя он использует SSH, он не использует SFTP. Вместо этого он связывается с удаленным экземпляром rsync напрямую, используя протокол rsync. Daniel B 8 лет назад 1
14
Sean Staats

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

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

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

За исключением того, что это будет сделано в однопоточном режиме, что может привести к более чем пятикратному снижению производительности в зависимости от степени косвенности в вашем решении для хранения данных. Mikhail 7 лет назад 0
Когда файл удаляется из источника, он не синхронизируется с местом назначения. Jirong Hu 7 лет назад 0