Как заставить rsync удалять файлы, которые были удалены из исходной папки?

Недавно я настроил компьютер с Ubuntu Server для размещения игровых серверов. Я установил плагин резервного копирования для каждого игрового сервера, который создает частые резервные копии файлов игрового мира в определенной папке на компьютере. Я также создал задачу cron для автоматического копирования этих резервных копий в папку Dropbox каждую ночь, используя rsync с опцией -a.

Через несколько месяцев моя учетная запись Dropbox достигла лимита хранилища, и я понял, что не смогу хранить столько резервных копий, поэтому я настроил плагин резервного копирования игрового сервера так, чтобы он не сохранял так много резервных копий, затем подождал несколько дней, чтобы увидеть если он будет удалять старые резервные копии, как это планируется делать еженедельно. Плагин резервного копирования в конце концов выполнил свою работу и удалил старые резервные копии, поэтому я ожидал, что задача cron rsync впоследствии удалит более старые резервные копии из моей папки Dropbox, чтобы они соответствовали исходной папке, но этого не произошло. Итак, у меня есть пара вопросов:

  • По умолчанию rsync только добавляет файлы в папку назначения, которые были добавлены в исходную папку и измените файлы, которые были изменены в исходной папке, но НЕ удалите файлы, которые были удалены из исходной папки ?

  • Если это так, каков наилучший способ заставить rsync сделать это? Я хочу, чтобы папка назначения полностью отражала исходную папку, а это означает удаление любых файлов, которые были удалены из исходной папки.

Я вижу некоторые варианты, перечисленные на странице руководства для rsync, которые могут помочь, но так как я не знаком с.

207
задан 2 September 2017 в 11:43

6 ответов

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

я предлагаю, чтобы Вы для использования rsync для сделали резервное копирование из исходных файлов и использовали find ... rm для файлов удаления в течение промежутка времени или размера файлов:

rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;

вышеупомянутый блок кода, сделайте резервное копирование из источника и затем удалите каждый файлы, которые в последний раз изменили время, являются более, чем 2-месячными.

ОБНОВЛЕНИЕ

, Поскольку я нахожу, что эти delete опции только для ЦЕЛИ, которые, если некоторые файлы удалены из источника, rsync --delete, удаляют их из ЦЕЛИ. И delete опция after и before, как упомянуто в ее странице справочника:

--delete-before         receiver deletes before transfer, not during

Средства, что:

  1. rsync удаляют файл из ЦЕЛИ, которые удалены из ИСТОЧНИКА.
  2. rsync начинают синхронизировать файлы.

--delete-after receiver deletes after transfer, not during

Средства, что:

  1. rsync начинают синхронизировать файлы.
  2. rsync удаляют файл из ЦЕЛИ, которые удалены из ИСТОЧНИКА после синхронизации.

ПРИМЕЧАНИЕ : эти --delete-{before/after} реализация только в ЦЕЛИ.

62
ответ дан 2 September 2017 в 11:43

Эта команда скопирует инкрементные данные и сохранит их в синхронизации с удаленным сервером.

  1. Это скопирует только возрастающие данные.
  2. Это удалит, если какие-либо данные удалили из источника.
  3. Это скопирует снова с источника, если какие-либо данные удалили в месте назначения.
  4. в основном эта команда сохранит обе среды в синхронизации.

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

Пример:

rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup
6
ответ дан 2 September 2017 в 11:43

Для удаления файлов в цели добавьте --delete опция к команде. Например:

rsync -avh source/ dest/ --delete
227
ответ дан 2 September 2017 в 11:43

Если будут какие-либо ошибки во время rsync scync, то rsync правильно не удалит файлы, которые он должен иметь, даже если бы Вы использовали --delete, --delete-after, или --delete-before.

Поэтому важно исправить rsync ошибки.

большинство моих ошибок происходило из-за использования --perms опция при синхронизации с файловой системой Не-Linux. Когда я заменил --perms --no-perms, те ошибки ушли и затем обработанное удаление.

--perms в порядке, когда Вы синхронизируете от файловой системы Linux до другой файловой системы Linux, но если Вы синхронизируете от Linux до файловой системы Не-Linux (как NTFS, FAT), --perms ошибки причин, потому что rsync не может установить полномочия Linux на не-Linux файловые системы . Снова, ошибки = не удаляют.

- При синхронизации к разделу Не-Linux, я использую --no-perms для предотвращения тех ошибок, которые саботируют --delete, --delete-after, или --delete-before.

, Если Вы все еще получаете ошибки после этого и не можете выяснить, как совершить те ошибки, идут путем, можно выполнить команду, которая исключительно выделена удалению несинхронизированных файлов:

sudo rsync -r --delete --existing --ignore-existing --ignore-errors --progress /path/to/source/ /path/to/destination

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

1
ответ дан 7 October 2019 в 17:45

Флаг «-delete» должен стоять после ваших / source и / destination .
Это примерно так

rsync -rvpthE --progress /Volumes/EOS_DIGITAL/DCIM/ /Users/mitchellg/Desktop/files -delete

Возможные варианты:

  • -r рекурсивный
  • -v подробный (вывод на экран)
  • -p права доступа
  • -t время (используйте время вместо контрольных сумм 'c')
  • -h человекочитаемый
  • -E расширенная информация (цветные теги на .Mac)
0
ответ дан 10 December 2019 в 19:50

Команда

$ rsync -avhn --delete local/ remote/

всегда синхронизирует изменения, сделанные локально, с удаленным. Это означает, что необходимо синхронизировать локальные и удаленные, чтобы

  1. файлы, добавленные в локальные, добавлялись в удаленные.
  2. файлы удалены из локальные удалены из удаленные
  3. файлы добавлены в удаленные удалены
  4. файлы удалены с удаленного восстанавливаются из локального, если они существуют, иначе игнорируются

Объяснение параметров:

  • -a режим архива
  • -v увеличить детализацию
  • -h выводить числа в удобочитаемом формате
  • -n пробный запуск, выполнить пробный запуск без внесения изменений. Всегда используйте этот флаг изначально, чтобы предотвратить потерю данных. Когда вы счастливы, удалите его.

Пусть результаты говорят сами за себя:

  • Создайте 2 каталога

     $ mkdir local/ remote/
     
  • Создать в них файлы

     $ touch local/local_only remote/remote_only local/exists_locally_and_remotely remote/exists_locally_and_remotely`
     
  • Посмотреть, что было создано (до rsync):

     $ ls local/ remote/
    местный/:
    exists_locally_and_remotely local_only
    дистанционный пульт/:
    существует_локально_и_удаленно удаленно_только
     
  • вызов rsync:

     $ rsync -avh --delete local/remote/
    отправка добавочного списка файлов
    удаление remote_only
    local_only
    отправлено 160 байт получено 50 байт 420,00 байт/сек
    общий размер равен 0, ускорение равно 0.00
     
  • См. результат (после rsync):

     $ ls local/ remote/
    местный/:
    exists_locally_and_remotely local_only
    дистанционный пульт/:
    exists_locally_and_remotely local_only
     

Как видите, файл remote/remote_only был удален, файл local/local_only был синхронизирован.

7
ответ дан 20 July 2020 в 13:05

Другие вопросы по тегам:

Похожие вопросы: