我正在尝试rsync server1的目录A与server2的目录B.
我坐在server1的目录A中,运行以下命令。
rsync -av * server2::sharename/B
但有趣的是,它同步除.htaccess之外的所有文件和目录或目录A中的任何隐藏文件。子目录中的任何隐藏文件都会同步。
我也尝试了以下命令:
rsync -av --include=".htaccess" * server2::sharename/B
但结果是一样的。
任何想法为什么隐藏A目录的文件没有得到同步以及如何解决它。我以root用户身份运行。
谢谢
这是因为*
默认扩展为当前工作目录中的所有文件,但名称以点开头的文件除外。因此,rsync
从不接收这些文件作为参数。
您可以将表示当前工作目录的.
传递给rsync
:
rsync -av . server2::sharename/B
这样,rsync
将在当前工作目录中查找要传输的文件,而不是在*
扩展到的内容中查找它们。
或者,您可以使用以下命令使*
扩展到所有文件,包括以点开头的文件:
shopt -s dotglob
对于那些只是试图在服务器之间同步目录(包括所有隐藏文件)的人 - 例如,将somedirA
上的source-server
同步到目标服务器上的somedirB
- 试试这个:
rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/
请注意两个路径末尾的斜杠。任何其他语法可能会导致意外的结果!
另外,对我来说,最容易从目标服务器执行rsync
命令,因为它更容易确保我有正确的写访问权限(即,我可能需要在上面的命令中添加sudo
)。
可能不言而喻,但显然您的远程用户还需要对源服务器上的somedirA
进行读取访问。 :)
我遇到过同样的问题。
对我来说,当我执行以下命令时,隐藏文件没有得到rsync'ed
rsync -av /home/user1 server02:/home/user1
但是当我在路径的末尾添加斜杠时,隐藏的文件被rsync了。
rsync -av /home/user1/ server02:/home/user1/
请注意路径末端的斜线,正如Brian Lacy所说,斜杠是关键。我没有评论他的帖子的声誉,或者我会这样做。
我认为问题是由于shell通配符扩展。使用 。而不是明星。
请考虑以下示例目录内容
$ ls -a .
. .. .htaccess a.html z.js
shell的通配符扩展转换了rsync程序从中获取的参数列表
-av * server2::sharename/B
成
-av a.html z.js server2::sharename/B
在命令开始执行之前。
*
告诉rsync不同步隐藏文件。你不应该省略它。