San*_*oid 82 unix linux shell rsync wildcard
我正在尝试rsync server1的目录A与server2的目录B.
我坐在server1的目录A中,运行以下命令.
rsync -av * server2::sharename/B
Run Code Online (Sandbox Code Playgroud)
但有趣的是,它同步除.htaccess之外的所有文件和目录或目录A中的任何隐藏文件.子目录中的任何隐藏文件都会同步.
我也尝试了以下命令:
rsync -av --include=".htaccess" * server2::sharename/B
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.
任何想法为什么隐藏A目录的文件没有得到同步以及如何解决它.我以root用户身份运行.
谢谢
Ada*_*man 101
这是因为*默认情况下会扩展到当前工作目录中的所有文件,但名称以点开头的文件除外.因此,rsync永远不要接收这些文件作为参数.
您可以将.当前工作目录的表示传递给rsync:
rsync -av . server2::sharename/B
Run Code Online (Sandbox Code Playgroud)
这种方式rsync将查找要在当前工作目录中传输的文件,而不是在*扩展到的内容中查找它们.
或者,您可以使用以下命令*扩展到所有文件,包括以点开头的文件:
shopt -s dotglob
Run Code Online (Sandbox Code Playgroud)
另见shopt联机帮助页.
Bri*_*acy 47
对于任何人谁只是想同步服务器之间的目录(包括所有隐藏文件) -例如,同步somedirA上source-server到somedirB目标服务器上- 试试这个:
rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/
Run Code Online (Sandbox Code Playgroud)
请注意两个路径末尾的斜杠.任何其他语法可能会导致意外的结果!
另外,对我来说,最容易rsync从目标服务器执行命令,因为它更容易确保我有正确的写访问权(即,我可能需要添加sudo到上面的命令).
可能不言而喻,但显然您的远程用户也需要somedirA在源服务器上具有读取权限.:)
har*_*guy 22
我遇到过同样的问题.
对我来说,当我做了以下命令隐藏文件并没有得到rsync'ed
rsync -av /home/user1 server02:/home/user1
Run Code Online (Sandbox Code Playgroud)
但是当我在路径的末尾添加斜杠时,隐藏的文件被rsync了.
rsync -av /home/user1/ server02:/home/user1/
Run Code Online (Sandbox Code Playgroud)
请注意路径末端的斜线,正如Brian Lacy所说,斜杠是关键.我没有评论他的帖子的声誉,或者我会这样做.