Rsync — Что конкретно делает флаг -b (резервное копирование)?

Rsync — Что конкретно делает флаг -b (резервное копирование)?

Я не могу понять, что делает флаг -b. Согласно официальной документации:

При использовании этой опции существующие файлы назначения переименовываются при передаче или удалении каждого файла.

Но я не понимаю, что это значит. Как можно переименовать удаляемый файл? Как переименование файлов связано с резервным копированием? После вызова rsync с -b файлы не были переименованы:

rsync --delete -bavh

И когда я прохожу различные руководства, они никогда не используют эту опцию. Так действительно ли она полезна?

В чем будет разница между

rsync --delete -bavh

и

rsync --delete -avh

Также, это может быть бесполезно, но мой вариант использования следующий: я хочу сделать резервную копию моего рабочего стола на смонтированный диск WebDAV. Резервное копирование будет запускаться каждый день в указанное время автоматически.

решение1

Целью данной backupопции является сохранение копии любых перезаписанных и/или удаленных файлов.

Его можно использовать --backup-dirдля хранения этих файлов в каталоге, отличном от целевого.

Вы можете дополнительно указать суффикс резервной копии с помощью --suffixопции, которая будет добавлена ​​к имени файла. Без нее файлы, скопированные в указанный backup-dirкаталог, сохранят свои исходные имена. С ней файлы могут быть переименованы и оставаться в исходном каталоге (то есть это backup-dirне обязательно).

Поэтому при использовании требуется либо backup-dir, либо .--suffixbackup

решение2

Поигрался с этим. Вот что я узнал.

Используйте --backup и --backup-dir для создания своего рода инкрементной резервной копии.

Допустим, у вас есть этот код:

# test date with a timestamp:
date +%F_%H-%M-%S
2024-03-06_19-48-08

#
SRC=your/cooldir
DST=backups
INCDIR="${DST}/inc_$(date +%F_%H-%M-%S)"
rsync -avh --backup --backup-dir="$INCDIR" "$SRC/" "$DST/"

При первом запуске вы получите backups/cooldir, который является полной резервной копией (зеркальной синхронизацией) вашего /cooldir.

Теперь добавьте файл newfile.txt в ваш/cooldir. Запустите код еще раз. Никакие файлы не были удалены или изменены, поэтому INCDIR не создан.

Теперь удалите ваш /cooldir/newfile.txt. Запустите код снова. Поскольку этот файл был удален и были указаны --backup и --backup-dir, вы получите backups/cooldir, как и раньше (полную резервную копию), но вы также получите каталог backups/inc_2024-03-06_19-57-23. Внутри этого инкрементного каталога вы получите newfile.txt. Он там, потому что был удален.

Вы можете попробовать это снова, создав newfile2.txt, запустить его, а затем при втором запуске просто изменить newfile2.txt (не удалять его). Вы снова получите newfile2.txt в папке backups/inc_xx.

Теперь попробуйте код, но измените эту строку:

INCDIR="${DST}/inc_$(date +%F)"

И снова запустите эти сценарии. В первый раз вы получите newfile.txt в backups/inc_2024-03-06. Во второй раз вы получите и newfile.txt, и newfile2.txt в том же каталоге. Другими словами, --backup и --backup-dir — это не совсем инкрементальное резервное копирование. Это скорее накопление последних изменений/удалений файлов.

Наконец, попробуйте следующее изменение:

rsync -avh --backup "$SRC/" "$DST/"

На этот раз вы получите измененные и удаленные файлы, переименованные с тильдой, например newfile.txt~

Связанный контент