Выяснение rsync для удаления файлов на стороне получения, которые не существуют на передающей стороне за исключениями на стороне получения

Одной вещью, которая сохраняет меня много времени, являются команды pushd/popd. Эти парни позволяют Вам создать стопку каталогов и уменьшить ввод много:

/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
29
23.05.2017, 15:40
2 ответа

Если Вы используете --delete и --exclude вместе то, что находится в исключенном месте, не будет удалено, даже если исходные файлы будут удалены.

Но это поднимает вопрос, которым не будет папка rsync'd вообще. Таким образом, Вам будет нужен другой rsync задание к sync та папка.

Например.

rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh

Вы могли выполнить их наоборот, но затем это удалит все удаленные файлы и затем заменит их, который не так эффективен.

Вы не можете сделать этого как одного лайнера.

33
27.01.2020, 19:38
  • 1
    Спасибо @Richard. Ваш ответ заставляет меня думать, что мой исходный вопрос, возможно, был легче, чем я думал. Если я использую одну строку: rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path, не был бы это делать rsync удалите все на пути получения, который не существует на передающем пути, кроме вещей, подобранных dont_delete_me? Самое главное, был бы rsync сохраните вещи на стороне получения подобранными dont_delete_me даже если ничто на передающих соответствиях стороны dont_delete_me? Если это так, я думаю, что это - единственная строка, в которой я нуждаюсь, правильно? –  Amelio Vazquez-Reina 11.08.2011, 19:59
  • 2
    Вы корректны, но Вы также не получите новые файлы и изменения в dont_delete_me папке, если Вы сделаете это в одной строке. Если Вы не хотите синхронизировать изменения и дополнения, то можно просто использовать - исключают флаг, как Вы описали здесь. –  Richard Holloway 12.08.2011, 00:46
  • 3
    @AmV Исключенные файлы не удален --delete, если Вы явно не указываете --delete-excluded. См. описание --delete и --delete-excluded в rsync руководстве. –  Gilles 'SO- stop being evil' 12.08.2011, 00:56

Я нашел, что следующее решение работает на мои цели:

rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest

(Примечание: Добавьте -n опция сделать пробный прогон, и не изменяется --delete кому: --delete-excluded!)

Выполнение команды вызывает следующие свойства:

  • Источник src каталог остается неизмененным
  • Место назначения dest папка соответствует исходной папке за исключением того, что:

    • объекты на do_not_send_to_dest список не отправляется месту назначения, и
    • объекты на do_not_modify_in_dest список оставляют неизмененным в месте назначения.
  • (Примечание: это не проблема для несуществующих объектов, которые будут перечислены в любом из"do_not_"файлы.)

Объяснение

Я предполагаю, поскольку rsync читает параметры командной строки слева направо, --delete аргумент, кажется, вызывает rsync к внутренне "режимам переключателя" (в некотором смысле), позволяя второе использование --exclude-from опция снова, но с другим значением.

Протест:

  • Если объект на do_not_send_to_dest список уже существует в месте назначения, затем:

    • эта команда не удаляет тот объект от места назначения (если объект сначала не удален из исходного каталога),
    • Внимание: изменение --delete кому: --delete-excluded удалит все в месте назначения, которое перечислено в любом из Ваших двух списков. xD (Возможно, rsync был записан, чтобы быть открыт / гибкий, но имеет некоторых с нюансами?)

Слегка использование протестировано.

Я использую"rsync version 3.0.9 protocol version 30".

4
27.01.2020, 19:38

Теги

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