Linux еквівалент робобокопії?


34

Це дивно, є багато способів, за допомогою яких інструменти командного рядка Linux значно перевершують ті, що стосуються Windows, але одна річ, яку я не знайшов рівнозначною, - це робокопія . Робокопія набагато універсальніша, ніж cpя не можу зрозуміти, як робити те, що я хочу за допомогою інструментів Linux.

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

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

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

Чи є еквівалент Robocopy в Linux? Я переглянув rsyncкоротко, але здавалося, що мені доведеться встановити сервер rsync, перш ніж намагатися синхронізувати папки.


1
Вам не потрібно налаштовувати сервер rsync, rsync over ssh автоматично запускає rsync на віддаленій машині в режимі сервера (таким чином, який використовується лише для цього з'єднання, працює під власним обліковим записом і автоматично закривається, коли це буде зроблено) .
CesarB

"... але здавалося, що мені доведеться налаштувати сервер rsync перед тим, як намагатися синхронізувати папки". Я використовував Rsync роками і ніколи не довелося налаштовувати офіційний сервер Rsync. Насправді багато інструментів синхронізації / резервного копіювання на macOS використовують Rsync як основну, не потребуючи налаштування такого сервера, як Carbon Copy Cloner і - я вважаю - SuperDuper!
JakeGould

Відповіді:


38

Звучить, що rsync - це точно те, що ви хочете. Вам не потрібно встановлювати сервер rsync для копіювання файлів з однієї машини на іншу. Rsync підтримує копіювання файлів через SFTP (передача файлів SSH), які вже ввімкнули більшість ящиків Linux (якщо не відключено вручну).

Детальнішу інформацію див. У файлах дзеркал Lifehacker у системах з rsync :

Якщо ви хочете створити резервну копію даних, безпечно поширювати файли або дзеркально працювати з документами через Інтернет від офісу до дому, між комп’ютерами в локальній мережі або з комп'ютера на веб-сервері, rsync може виконати роботу. Сьогодні ми будемо використовувати rsync для дзеркальних папок між Mac та ПК через захищене з'єднання в командному рядку.

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


Прочитайте сторінку rsync man - для використання ssh (без явного сервера rsync) ви будете використовувати "-e ssh"
Doug Harris

1
rsync - приголомшливий! І вам не потрібно використовувати -e, оскільки будь-який шлях, наприклад user@host.com: / blah / автоматично використовуватиме його.
The How-To Geek

Ммм, це круто. Отже, він може використовувати scpсинтаксис, подібний в основному , для передачі через ssh? Я насправді намагався перенести файли на одну машину, але це добре знати.
Ібрагім,

1
На жаль, ця відповідь не зовсім коректна: хоча він використовує SSH, він не використовує SFTP. Натомість він спілкується з віддаленим екземпляром rsync безпосередньо, використовуючи протокол rsync.
Даніель Б

15

rsync буде копіювати файли з одного каталогу в інший каталог на тій же машині, що і роботокопія. Ось команда rsync, яка еквівалентна вашій команді robocopy:

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

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


За винятком того, що це буде зроблено в один потік, що може призвести до 5-кратного показника продуктивності залежно від кількості опосередкованості у вашому рішення для зберігання.
Михайло

Коли файл видаляється з джерела, він не синхронізується з пунктом призначення.
Jirong Hu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.