Не удается заставить rsyn c принять `mkdir -p` (--parents) в аргументе rsyn c -path? - PullRequest
1 голос
/ 24 января 2020

Я видел в таких сообщениях, как rsyn c - создать все недостающие родительские каталоги? :

rsync -aq --rsync-path='mkdir -p /tmp/imaginary/ && rsync' file user@remote:/tmp/imaginary/

Я подумал - отлично, позвольте мне попробовать это:

$ rsync -aP --remove-source-files --rsync-path="mkdir -p /home/pi/ARCHIVE/2020/01/24 && rsync" a1.test a1.json a1.pdf /home/pi/ARCHIVE/2020/01/24/
sending incremental file list
rsync: mkdir "/home/pi/ARCHIVE/2020/01/24" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(675) [Receiver=3.1.2]

Хорошо, конечно mkdir "/home/pi/ARCHIVE/2020/01/24" failed - но я НЕ выдавал mkdir, я выдал mkdir -p!

Так почему rsyn c проигнорировал это? Есть ли другие настройки, которые я должен установить для этого? Или, может быть, rsyn c -path можно использовать СТРОГО для соединений s sh (что здесь не так)?

1 Ответ

2 голосов
/ 24 января 2020

--rsync-path применяется только к удаленным машинам:

--rsync-path=PROGRAM    specify the rsync to run on remote machine

Это потому, что вам не нужно вызывать второй экземпляр rsync, когда вы делаете локальную копию. Копия будет просто выполнена процессом, который вы запустили.

Так как технически вы вызывают на целевой машине rsyn c, это вы , который должен добавить mkdir .. && перед rsync:

mkdir -p /home/pi/ARCHIVE/2020/01/24 &&
    rsync -aP --remove-source-files a1.test a1.json a1.pdf /home/pi/ARCHIVE/2020/01/24/
...