На странице руководства 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
--delete-before
это описано как(default)
? Я не могу понять, что(default)
значит.man
странице дляrsync version 3.1.2 protocol version 31
. Тем не менее, я предполагаю, что версия с цитируемым текстом заключается в том, что если вы используете только--delete
вместо--delete-WHEN
, то вы как бы указали,--delete-WHEN
где поWHEN
умолчаниюbefore
.Ответы:
--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 копий всей информации, вам нужно удалить ее по ходу и т. Д. немного странный из-за своей длинной истории на разных платформах: были добавлены некоторые опции, чтобы люди, привыкшие к определенному поведению, не были сбиты с толку
источник
delete-after
удаляется ли каждый файл между синхронизацией или только после того, как весь каталог был отражен? Я думал, чтоdelete-after
было достаточно для моих нужд, но у меня не осталось места на устройстве при резервном копировании одного из моих дисков.delete-during
это не всегда мешаетno space left on device
(в Linux). Такdelete-before
что это единственный гарантированный способ избежать этого (например, при зеркалировании диска, который почти заполнен, и целевой диск также почти заполнен).Происходят две вещи:
Отправителю или получателю может быть поручено удалить (я не уверен, почему это важно). Таким образом, когда rsync с одного компьютера подключается к серверу rsync с другой стороны, это определяет, кто эффективно выполняет команду удаления.
Когда это происходит, довольно просто ... before означает, что все файлы удалены, и тогда rsync копирует файлы. во время просмотра списка файлов он удаляет их, когда приходит к ним, а после означает, что ожидает, пока все файлы не будут переданы, а затем удаляет удаленную сторону. Это имеет значение только тогда, когда передача прерывается.
источник
--delete-before
удалить только те файлы, которые нужно было удалить, а не все файлы! Но я думаю, вполне возможно, что rsync удалит все и затем передаст «новые» (возможно, неизмененные) данные ...--remove-source-files
.Еще один момент, о котором стоит упомянуть: если ваш исходный каталог заканчивается
/*
, то rsync будет рассматривать только эти файлы, а не сам каталог (и, следовательно, отсутствие файлов, которые вы хотите удалить в месте назначения).Если вы указали опцию удаления выше, но rsync выглядит так, как будто она не удаляется, то убедитесь, что вы случайно не перетаскиваете и не предоставляете список файлов, когда имеете в виду сам каталог.
источник