Які відмінності між параметрами видалення rsync?


118

Я бачу на сторінці rsync man, що існує ряд deleteваріантів, але насправді не розумію відмінностей між ними. Які відмінності між цими варіантами?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
Чому --delete-beforeйого описують як (default)? Я не можу зрозуміти, що (default)означає.
Марко Марсала

1
Це більше не вказано як manсторінку за замовчуванням для сторінки rsync version 3.1.2 protocol version 31. Однак, я здогадуюсь про версію з цитованим текстом, це те, що якщо ви використовуєте лише, --deleteа не --delete-WHEN, то це так, ніби ви вказали, --delete-WHENде потрібно WHENза замовчуванням before.
Том Хейл

Відповіді:


114
  • --del/--delete_during: Видаляє файли з призначеного редактора, коли вони копіюються (економить пам'ять порівняно з --delete-before: --delete-beforeробить окреме сканування для пошуку видаляються файлів)

  • --delete: Видаляє файли в каталозі призначення, якщо вони не існують у вихідному каталозі.

  • --delete-before: Видаліть файли в каталозі призначення, перш ніж копіювати файл із таким самим іменем з вихідного каталогу

  • --delete-during: Видаліть файли в каталозі призначення, КОПІРУЙТЕ копіювання файлу з однойменним іменем з вихідного каталогу

  • --delete-delay: Позначення видаляє під час передачі, але зачекайте, поки передача завершиться

  • --delete-after: Одержувач видаляється після передачі, а не раніше ... Якщо якась інша частина rsync перемістила зайві файли в інше місце, ви хочете цього замість --delete-delay, тому що --delete-delayвирішує, що буде видалено в середині передачі, тоді як --delete-afterперевіряє каталог на файли що слід видалити ПІСЛЯ все закінчено.

  • --delete-excluded: Видаляє файли з каталогу призначення, які явно виключаються з передачі з вихідного каталогу.

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

Зокрема, --deleteпрапор, який я бачив накручений багато разів. Дуже багато людей використовують rsync для переміщення файлів у сховище з низьким пріоритетом, і в цьому випадку ви хочете, щоб файли, які ви переміщуєте, все ще існували в каталозі призначення. Це не те, що видаляє: --deleteвпевнений, що, коли ви видаляєте файл із вихідного каталогу, його ТАКОЖ видаляють із каталогу призначення, щоб ваше призначення не було заповнене непотрібним бажанням ... Одного разу побачивши, як хлопець витирає резервну копію додавши новий привід, а не вимикаючи його нічний сценарій rsync. Сценарій побачив, що вихідний dir тепер порожній, і він видалив кожен файл із призначення dir, щоб вони відповідали.

Більшість інших варіантів стосуються простору чи продуктивності. Коли ви видаляєте файли, важливо, якщо ви хочете переконатися, що передача успішна, перш ніж робити що-небудь, але якщо ваш пристрій занадто малий, щоб обробляти 2 копії всієї інформації, їх потрібно видалити під час роботи тощо. Це мало дурний через свою довгу історію на різних платформах: були додані деякі варіанти, щоб людей, які звикли до певної поведінки, не плутати.


3
Тож --delete і --delete-перед тим же? man rsync не каже, коли --delete видаляє файли.
ппр

@ppr: Залежить від системи. Причина, в якій є так багато конкретних варіантів, полягає в тому, що видалити в Solaris! = Видалити на HP-UX! = Видалити в AIX! = Видалити в Linux.
Satanicpuppy

Чи rsyncing цілого каталогу, чи delete-afterвидаляє кожен файл між синхронізацією чи лише після того, як було відображено весь файл dir? Я вважав, що delete-afterце достатньо для моїх потреб, але мені не залишається місця на пристрої під час резервного копіювання одного з моїх дисків.
Шрідхар Сарнобат

1
@ Шрідхар-Сарнобат: Або. Він переміщує все, що буде рухатися, і коли це буде зроблено, він починає видаляти речі. Якщо ви хочете, щоб його видалили, перш ніж все переміститься, використовуйте --delete-
while

2
Після деякого досвіду, я виявляю, що навіть delete-duringне завжди перешкоджає no space left on device(в Linux). Тож delete-beforeце єдиний гарантований спосіб цього уникнути (як, наприклад, при дзеркальному відображенні майже повного накопичувача, а також накопичувача майже повністю).
Шрідхар Сарнобат

1

Дві речі відбуваються:

  1. Хто робить видалення
  2. Коли це станеться

Або відправника, або одержувача можна доручити зробити видалення (я не впевнений, чому це має значення). Отже, коли rsync з одного комп’ютера підключається до сервера rsync з іншого боку, це визначає, хто ефективно видає команду delete.

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


Я впевнений, що жоден із цих варіантів не пов’язаний із видаленням речей зі сторони відправника . Усі вони (AFAIK) стосуються видалення речей зі сторони приймача . Крім того, ви говорите: "раніше означає, що всі файли видаляються, а потім rsync копіює файли" - це правильно? Я очікував --delete-beforeби видалити лише ті файли, які потрібно було втратити, не всі файли! Але, мабуть, можливо , rsync видаляє все, а потім передає "нові" (можливо, незмінні) дані ...
Quuxplusone

1
Ах, «видалити з боку відправника» буде підтриманий Rsync, але назва цієї опції --remove-source-files.
Квікслусон

1

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

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

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