Answers:
如果要创建的目录目录比最后一个目录目录多,可以ssh ... mkdir -p
先运行一个单独的目录,也可以--rsync-path
按照以下说明操作:
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
或使用--relative
Tony建议的选项。在这种情况下,您仅指定目的地的根(必须存在),而不指定将要创建的源的目录结构:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
这样,您将最终获得/ pre_existing / dir / new / x / y / z /
如果要创建“ y / z /”,而不要在“ new / x /”内部,则可以添加./
要--relative
开始的位置:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
将创建/ pre_existing / dir / y / z /。
&&
?
假设您正在使用ssh连接rsync,那么在发送ssh命令之前该怎么做:
ssh user@server mkdir -p existingdir/newdir
如果已经存在,则什么也不会发生
rsync
,因此没有答案。
ssh
不支持,则不是一个选项,它rsync
连接到rsync daemon
远程端上的。
该-R, --relative
选项将执行此操作。
例如:如果要备份/var/named/chroot
并在远程服务器上创建相同的目录结构,则-R
只需执行此操作。
/./
在源路径中使用来指定要创建的路径的一部分。有关详细信息,请参见手册页。
rsync
如果目标文件夹不存在,则不会自动创建目录。叹。
--relative
。它可能不会按照您的想法做。
--relative
与/./
大多数新手将寻找的东西结合在一起。rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
会将桌面内容复制到目标桌面。不知道用户名的不同会如何影响这一点。
这为我工作:
rsync /dev/null node:existing-dir/new-dir/
我确实收到此消息:
skipping non-regular file "null"
但我不必担心周围会有一个空目录。
我不认为您可以使用一个rsync命令来做到这一点,但是您可以像这样先“预先创建”额外的目录:
rsync --recursive emptydir/ destination/newdir
其中“ emptydir”是本地空目录(您可能必须首先将其创建为临时目录)。
这有点hack,但是对我有用。
干杯
克里斯
rsync /dev/null node:existing-dir/new-dir/
上面的建议。
该答案使用了其他答案,但希望情况会更清楚一些。您从未指定要同步的内容-一个目录条目或多个文件。
因此,假设您要遍历整个源目录条目,而不仅仅是移动其中包含的文件。
假设您有一个本地调用的目录,data/myappdata/
并且在此目录下有很多子目录。您data/
在目标计算机上,但没有data/myappdata/
-这很容易:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
您甚至可以为远程目录使用其他名称:
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
如果您只是移动一些文件而不移动包含它们的目录条目,则可以执行以下操作:
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
它将myappdata
在远程计算机上为您创建用于放置文件的data/
目录。同样,该目录必须在远程计算机上存在。
顺便说一句,我使用-rvv
flag是为了获得双重详细输出,因此很清楚它的作用以及必要的递归行为。
只是为了向您展示使用rsync时得到了什么(在Ubuntu 12.04上为3.0.9)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
希望这可以解决这一点。
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
但在目标上创建的是/ remote / path / to / data / myappdata / myappdata /
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
mkdir
,所以我正在使用hack:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
它确实创建了一个额外的文件,但您以后可以删除。