我之前在跑步
rsync -rv /home/myname/mydir1 myhost:/home/myname/mydir1
并得到了
/home/mydir1/mydir1/...
我该如何解决这个问题,这样我就没有多余的“mydir1”?
答案1
请参阅“用法”部分中的示例rsync 手册页
您可以使用
rsync -rv /home/myname/mydir1 myhost:/home/myname
或者
rsync -rv /home/myname/mydir1/ myhost:/home/myname/mydir1
答案2
rsync -rv /home/myname/mydir1/* myhost:/home/myname/mydir1
仅复制 mydir1 下的文件(和子目录)
rsync -rv /home/myname/mydir1 myhost:/home/myname/mydir1
将复制目录本身,这样你就得到 mydir1/mydir1
francois@zaphod:~/tmp$ rm -rf b
francois@zaphod:~/tmp$ mkdir b
francois@zaphod:~/tmp$ rsync -rv a/* b
sending incremental file list
a
sent 80 bytes received 35 bytes 230.00 bytes/sec
total size is 0 speedup is 0.00
francois@zaphod:~/tmp$ tree b
b
└── a
0 directories, 1 file
francois@zaphod:~/tmp$ rm -rf b
francois@zaphod:~/tmp$ rsync -rv a b
sending incremental file list
created directory b
a/
a/a
sent 108 bytes received 63 bytes 342.00 bytes/sec
total size is 0 speedup is 0.00
francois@zaphod:~/tmp$ tree b
b
└── a
└── a
1 directory, 1 file
答案3
这是一个罕见的情况,尾随/
很重要。在许多命令中指定foo
和foo/
是相同的。但它确实有语义上的差异。在某些命令(包括 rsync)中,尾随/
告诉命令根据这是一个目录的事实采取特殊操作。如果您遇到由...造成的情况
mkdir foo bar
touch foo/baz
...并且您想将内容从 foo 复制到 bar 然后不要指定...
rsync -rv foo bar
...而是指定...
rsync -rv foo/ bar
否则 rsync 会认为您希望将整个树(包括父目录)复制到您找到的目标目录中。
另一个类似的例子有效的语义是ls
列出链接时:
mkdir foo
touch foo/baz
ln -s foo bar
ls -l bar
lrwxrwxrwx 1 philip philip 3 May 7 14:58 bar -> foo
ls -l bar/
total 0
-rw-r----- 1 philip philip 0 May 7 14:58 baz