Одной вещью, которая сохраняет меня много времени, являются команды pushd/popd. Эти парни позволяют Вам создать стопку каталогов и уменьшить ввод много:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
Если Вы используете --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
Вы могли выполнить их наоборот, но затем это удалит все удаленные файлы и затем заменит их, который не так эффективен.
Вы не можете сделать этого как одного лайнера.
Я нашел, что следующее решение работает на мои цели:
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
".
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--delete
, если Вы явно не указываете--delete-excluded
. См. описание--delete
и--delete-excluded
в rsync руководстве. – Gilles 'SO- stop being evil' 12.08.2011, 00:56