无法通过 SSH 使用 rsync 复制特定文件

无法通过 SSH 使用 rsync 复制特定文件

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 过滤规则的技巧

答案2

本主题可以帮助您: rsync 使用正则表达式仅包含一些文件

看来 rsync 的 --include 和 --exclude 不理解正则表达式

问候,

相关内容