rsync:我怎样才能configuration它在服务器上创build目标目录?
我想从本地计算机到服务器的rsync
。 在不存在的目录上,我希望rsync
首先在服务器上创build该目录。
我怎样才能做到这一点?
如果你创build的最后一个叶子目录不止一个,你可以先运行一个单独的ssh ... mkdir -p
,或者使用--rsync-path
技巧,如下所示:
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
或者按照Tony的build议使用--relative
选项。 在这种情况下,您只能指定必须存在的目标的根目录,而不是要创build的源的目录结构:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
这样,你将以/ pre_existing / dir / new / x / y / z /
假设你使用ssh来连接rsync,那么之前要发送一个ssh命令呢?
ssh user@server mkdir -p existingdir/newdir
如果它已经存在,什么都不会发生
-R, --relative
选项将执行此操作。
例如:如果要备份/var/named/chroot
并在远程服务器上创build相同的目录结构,则-R
将执行此操作。
这对我工作:
rsync /dev/null node:existing-dir/new-dir/
我得到这个消息:
skipping non-regular file "null"
但我不必担心有一个空的目录在附近。
我不认为你可以用一个rsync命令来完成,但你可以像这样预先创build额外的目录:
rsync --recursive emptydir/ destination/newdir
'emptydir'是一个本地空目录(你可能必须先创build一个临时目录)。
这有点破解,但对我有用。
干杯
克里斯
这个答案使用了一些其他的答案,但希望对于情况会更清楚一些。 你从来没有指定你正在rsyncing – 一个目录条目或多个文件。
所以,让我们假设你正在移动一个目录条目,而不是仅仅移动文件。
假设你有一个本地名为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/
它会在远程机器上为你创buildmyappdata
目录来放置你的文件。同样, data/
目录必须存在于远程机器上。
顺便说一下,我使用-rvv
标志是为了得到双重冗长的输出,所以清楚它的作用,以及必要的recursion行为。
只是为了向您展示我使用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
希望这个清除一点点。
我没有足够的代表评论。
由@mivk提供的答案有一个陷阱,因为它是在我的浏览器中显示的卷起的引号,当逐字地复制时它将不起作用。 请修改为:
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
例如:
来自:/xxx/a/b/c/d/e/1.html
到:user @ remote:/pre_existing/dir/b/c/d/e/1.html
rsync的:
cd / xxx / a /&rsync -auvR b / c / d / e / user @ remote:/ pre_existing / dir /