ssh
我正在尝试通过将所有 PHP 文件同步到另一台计算机rsync
。但是,它从未复制任何文件。我在 Mac OSX Mountain Lion (10.8.4) 上
以下是我尝试过的:
rsync --rsh=ssh --verbose --remove-source-files --recursive --exclude=* --include='*.php' $HOME/ pi@raspberrypi:~
building file list ... done
sent 36 bytes received 20 bytes 112.00 bytes/sec
total size is 0 speedup is 0.00
或者
rsync --verbose --remove-source-files -e "ssh" $HOME/*.php pi@raspberrypi:~
rsync: link_stat "/Users/simonjackson/*.php" failed: No such file or directory (2)
sent 21 bytes received 20 bytes 82.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]
对此有什么想法吗?
答案1
正确的语法是:
rsync --include="*.php" --filter="-! */" source dest
普通规则的问题exclude="*"
在于它会排除所有内容,甚至是目录,因此您无法包含任何内容,因为所有文件和文件夹都会再次被排除 - 有意义吗?
为了解释--filter
此处的规则,请查看手册页:
A
!
指定当模式不匹配时,包含/排除应生效。例如,"-! */"
将排除所有非目录。
这正是我们想要的,因为我们想排除所有其他文件,简单来说。
还要注意,--exclude=*
只在某些 shell 中有效,例如 Bash。在 Zsh 中,它会*
在执行命令之前尝试扩展。这意味着rsync
会得到错误的包含/排除列表。因此,为了安全起见,请始终引用模式以防止它们过早扩展。
如需进一步了解,请参阅:使用 rsync 过滤规则的技巧