Використовуючи rsync для переміщення (не копіювання) файлів між каталогами?


55

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

Якщо це правильно, чи буде якась перевага використання rsync для переміщення вмісту папки A , скажімо, папки B , при цьому B порожній?

У папці A є близько 1 ТБ даних (і мільйони файлів у ній). Передача здійснюватиметься через локальну мережу ( A і B знаходяться в різних файлових системах, обидва встановлені на суперкомп'ютері, наприклад, A - це NFS, а B - блиск ).

Крім цього, які прапори я повинен використовувати, щоб попросити rsync переміщувати (а не копіювати) файли з A в B (тобто видаляти A, коли передача успішно завершена)?


7
Я не думаю, що rsyncможе замінити mv. Я б очікував, mvщо буде швидше для більшості типів файлової системи, коли джерело та адресат знаходяться в одній і тій же файловій системі, тому rsyncщо потрібно було б зробити копію незалежно від цього, і, mvможливо, міг би піти зі зміни кількох записів каталогів. Найближче, що я можу знайти, rsync mvце --remove-source-filesкоманда, але це не видаляє каталоги.
jw013

2
Дякую @ jw013! Просто для уточнення, файли знаходяться в різних файлових системах, і передача буде здійснюватися в мережі . Чи знаєте ви, чи все-таки це зробиться mvшвидше?
Амеліо Васкес-Рейна

1
Ну, mvне можна працювати через мережу - доведеться покладатися на локальне кріплення (наприклад, NFS). Якщо вузьким місцем є мережа, rsyncможливо, це буде швидше, ніж mvтому, що rsyncможе робити стиснення.
jw013

2
До речі, cpє -uможливість скопіювати вихідний файл, якщо він новіший за цільовий файл або коли файл відсутній,
киньте

Відповіді:


69

Ви можете перейти --remove-source-filesдо rsync для переміщення файлів, а не копіювання.

Але у вашому випадку використовувати rsync немає сенсу, оскільки пункт призначення порожній. Простий mvвиконає роботу якнайшвидше.

У вашому випадку, що може змінити ефективність - це вибір мережевого протоколу, якщо у вас є вибір серед NFS, Samba, sshfs, sftp, rsync over ssh, tar, перекладених у ssh тощо. Відносна швидкість цих методів залежить щодо розмірів файлів, мережі та пропускної здатності диска та інших факторів, тому немає можливості дати загальну пораду. Вам потрібно буде запустити власні орієнтири.


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

5
--remove-source-filesвидаляє тільки файли в джерелі. якщо ви хочете очистити наше джерело, чи не доведеться вам робити rm -rf (або findвсі каталоги та передавати -delete) на джерело після успішного запуску rsync?
Тревор Бойд Сміт

1
@ DanielS.Sterling rsync не записує контрольну суму після їх запису (використовує контрольні суми, щоб знайти, які частини існуючих файлів були оновлені та потребують синхронізації). Ви можете зробити другу синхронізацію з цим, --checksumщоб сказати, щоб перевірити результати першої синхронізації.
Clément

19

Оскільки --remove-source-filesне видаляє каталоги, я видаю наступні команди для переміщення файлів через ssh:

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

Мені особисто подобається ця --progressфункція, оскільки я цю передачу роблю вручну. Видаліть його, якщо ви використовуєте сценарій. Я очікую, що це гальмує трансфери незначно. Опція findвидалення команди видаляє лише порожні каталоги - не використовуйте rm -rf, оскільки вона може видалити непорожні каталоги у випадку, якщо файл не був переданий. -deleteОпція включає -depthопцію , так що порожні дерева каталогів будуть видалені з «знизу» вгору.


3
-deleteнабагато приємніше, ніж -exec rmdir {} +тощо
lkraav

1
Я б пропустив зірочку, тому що і просто матимуть кінці / з доріжками, якщо це робити локально. Якщо ви використовуєте зірочку, rsync пропустить приховані файли, такі як .htaccess або .htpasswd (якщо такі є)
Светослав Маринов

16

Взагалі, як сказав Гілль, немає переваги використовувати rsyncдля переміщення файлів, коли mvзробити ту саму роботу простіше, і немає потенційного збільшення швидкості між звичайними файловими системами.

Однак є деякі випадки, коли є перевага. Зокрема, якщо у вас є сумніви щодо стабільності або джерела, місця призначення, або машини, яка виконує роботу, використання rsyncдає змогу відновити можливість. Це може бути помітною перевагою, якщо передача дуже велика і, скажімо, ваша електромережа ненадійна. Використання rsync стане більш стабільним способом уникнути пошкодження даних у разі відмови та вибрати місце, де ви зупинилися.


5
Я б сказав, що це величезна перевага. Насправді, я б сказав mv, що краще лише, якщо мета та джерело знаходяться в одному розділі, так що mvлише редагуйте метадані файлу, а не копіюйте.
номенклатура

2
Один раз мені потрібен, rsyncа не mv, коли я хочу зберегти структуру папок (якщо ви використовуєте --relative).
Шрідхар Сарнобат

15

чи буде якась перевага використання rsync для переміщення вмісту папки A, скажімо, папки B, при цьому B порожній?

Я опинився в ситуації, коли rsync IS швидше, ніж mv, просто тому, що mv не може обробити кількість файлів у каталозі. У мене 1,8 мільйона фотографій із камери безпеки, яка працювала протягом 20 днів, і команда mv завершує роботу, оскільки вона не може виділити ресурси.

Однак, rsync, здається, обробляє всі файли без проблем.


1

Якщо ви хочете рекурсивно об'єднати каталоги ... перемістіть один каталог в інший каталог з потенційно повторюваними іменами каталогів, то, будь ласка, дивіться мою відповідь тут на serverfault.com. mvробить погану роботу, коли каталоги існують з тим самим іменем, і rsyncкопіює (читати + записувати повні дані) кожен файл, а не просто переміщувати їх (читати та записувати лише метадані).


0

Немає можливості реально переміщувати файли за допомогою rsync, як це робила команда Linux mv. Використовуючи --remove-source-файли, ви по суті копіюєте файли до місця призначення, а потім видаляєте файли (крім каталогів) з джерела. Це може досягти вашої мети переміщення файлів, але ви НЕ заощадите час або роботу вводу / виводу.

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