107

На странице справочника 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

3 ответа3

105
  • --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. Скрипт увидел, что исходный каталог теперь пуст, и удалил все файлы в целевом каталоге, чтобы они соответствовали.

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

1

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

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

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .