Каковы различия между опциями удаления rsync?

120

На странице руководства rsync я вижу, что есть несколько 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
Skilldrick
источник
2
Почему --delete-beforeэто описано как (default)? Я не могу понять, что (default)значит.
Марко Марсала
1
Он больше не указан по умолчанию на manстранице для rsync version 3.1.2 protocol version 31. Тем не менее, я предполагаю, что версия с цитируемым текстом заключается в том, что если вы используете только --deleteвместо --delete-WHEN, то вы как бы указали, --delete-WHENгде по WHENумолчанию before.
Том Хейл,

Ответы:

115
  • --del/--delete_during: Удаляет файлы из директории назначения по мере их копирования (экономит память по сравнению с --delete-before: --delete-beforeвыполняет отдельное сканирование для поиска удаляемых объектов)

  • --delete: Удаляет файлы в целевом каталоге, если они не существуют в исходном каталоге.

  • --delete-before: Удалить файлы в каталоге назначения перед копированием файла с тем же именем из исходного каталога

  • --delete-during: Удаление файлов в целевом каталоге при копировании файла с тем же именем из исходного каталога

  • --delete-delay: Отметка удаляется во время передачи, но дождитесь завершения передачи

  • --delete-after: Receiver удаляет после передачи, а не до ... Если какая-то другая часть rsync переместила дополнительные файлы в другое место, вы захотите вместо этого --delete-delay, потому что --delete-delayрешает, что будет удалено во время передачи, тогда как --delete-afterпроверяет каталог на наличие файлов это должно быть удалено ПОСЛЕ того, как все закончено.

  • --delete-excluded: Удаляет файлы из целевого каталога, которые явно исключены из передачи из исходного каталога.

Точка rsync не копирует, а архивирует. Это важное различие. Обработка удаленных / измененных файлов имеет решающее значение, и во многих случаях нюансы.

В --deleteчастности, флаг, который я видел, облажался много раз. Многие люди используют rsync для перемещения файлов в хранилище с низким приоритетом, и в этом случае вы хотите, чтобы файлы, в которые вы перемещаетесь, все еще существовали в существующем каталоге. Это не то, что делает удаление: --deleteгарантирует, что когда вы удаляете файл из исходного каталога, он также удаляется из вашего каталога назначения, поэтому ваш пункт назначения не переполняется мусором ... Однажды увидел, как парень стер свою резервную копию вставив новый диск, и не отключая его ночной сценарий rsync. Скрипт увидел, что исходный каталог теперь пуст, и удалил все файлы в целевом каталоге, чтобы они соответствовали.

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

Satanicpuppy
источник
3
Значит, --delete и --delete-before одно и то же? man rsync не говорит, когда --delete удаляет файлы.
апреля
@ppr: зависит от системы. Причина, по которой у него так много специфических опций, заключается в том, что delete в Solaris! = Delete в HP-UX! = Delete в AIX! = Delete в Linux.
Satanicpuppy
При повторном синхронизировании всего каталога delete-afterудаляется ли каждый файл между синхронизацией или только после того, как весь каталог был отражен? Я думал, что delete-afterбыло достаточно для моих нужд, но у меня не осталось места на устройстве при резервном копировании одного из моих дисков.
Шридхар Сарнобат
1
@ Шридхар-Сарнобат: Либо. Он перемещает все, что собирается переместить, и когда это сделано, он начинает удалять вещи. Если вы хотите, чтобы он был удален до того, как все было перемещено, используйте --delete-
while
2
После некоторого опыта я обнаружил, что даже delete-duringэто не всегда мешает no space left on device(в Linux). Так delete-beforeчто это единственный гарантированный способ избежать этого (например, при зеркалировании диска, который почти заполнен, и целевой диск также почти заполнен).
Шридхар Сарнобат
1

Происходят две вещи:

  1. Кто делает удаление
  2. Когда это произойдет

Отправителю или получателю может быть поручено удалить (я не уверен, почему это важно). Таким образом, когда rsync с одного компьютера подключается к серверу rsync с другой стороны, это определяет, кто эффективно выполняет команду удаления.

Когда это происходит, довольно просто ... before означает, что все файлы удалены, и тогда rsync копирует файлы. во время просмотра списка файлов он удаляет их, когда приходит к ним, а после означает, что ожидает, пока все файлы не будут переданы, а затем удаляет удаленную сторону. Это имеет значение только тогда, когда передача прерывается.

Майкл Прайор
источник
Я уверен, что ни один из этих вариантов не связан с удалением вещей со стороны отправителя . Все они (AFAIK) относятся к удалению вещей со стороны получателя . Кроме того, вы говорите: «before означает, что все файлы удалены, а затем rsync копирует файлы» - это правильно? Я хотел бы --delete-beforeудалить только те файлы, которые нужно было удалить, а не все файлы! Но я думаю, вполне возможно, что rsync удалит все и затем передаст «новые» (возможно, неизмененные) данные ...
Quuxplusone
1
Ах, «удалить из стороны отправителя» будет поддержан Rsync, но название этой опции --remove-source-files.
Quuxplusone
1

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

Если вы указали опцию удаления выше, но rsync выглядит так, как будто она не удаляется, то убедитесь, что вы случайно не перетаскиваете и не предоставляете список файлов, когда имеете в виду сам каталог.

Уолт Стоунбернер
источник