Подтвердить что ты не робот

Rsync - создать все отсутствующие родительские каталоги?

Я ищу программу rsync, которая создаст любые отсутствующие родительские каталоги на удаленной стороне.

Например, если у меня есть /top/a/b/c/d на одном сервере и только /top/a существует на удаленном сервере, я хочу скопировать d на удаленный сервер и создать каталоги b и c, созданные как хорошо.

Команда:

rsync /top/a/b/c/d remote:/top/a/b/c

не будет работать, потому что /tmp/a/b не существует на удаленном сервере. И если он существует, файл d будет скопирован на путь /top/a/b/c.

Это можно сделать с помощью rsync с помощью переключателей --include и --exclude, но это очень важно, например:

rsync -v -r a dest:dir  \
  --include 'a/b'       \
  --include 'a/b/c'     \
  --include 'a/b/c/d'   \
  --include 'a/b/c/d/e' \
  --exclude 'a/*'       \
  --exclude 'a/b/*'     \
  --exclude 'a/b/c/*'   \
  --exclude 'a/b/c/d/*' 

копирует только a/b/c/d/e в dest:dir/a/b/c/d/e, даже если промежуточные каталоги имеют файлы. (Примечание - включение должно предшествовать исключениям.)

Есть ли другие варианты?

4b9b3361

Ответ 1

Возможно, вы ищете

rsync -aR

например:

rsync -a --relative /top/a/b/c/d remote:/

См. также этот трюк в другом вопросе.

Ответ 3

Я предлагаю вам принудительно выполнить существование вручную:

ssh [email protected] mkdir -p /top/a/b/c
rsync /top/a/b/c/d remote:/top/a/b/c

это создает целевую папку, если она уже не существует.

Ответ 4

--relative не работает для меня, так как у меня была другая настройка. Может быть, я просто не понял, как работает --relative, но я обнаружил, что

ssh remote mkdir -p /top/a/b/c
rsync /top/a/b/c/d remote:/top/a/b/c

легко понять и выполнять работу.

Ответ 5

Я искал лучшее решение, но мне кажется, что он лучше подходит, когда у вас слишком много подкаталогов для их создания вручную.

Просто используйте cp в качестве промежуточного шага с опцией --parents

cp --parents /your/path/sub/dir/ /tmp/localcopy
rsync [options] /tmp/localcopy/* remote:/destination/path/

cp --parents создаст структуру для вас.