转载请注明文章出处:zsh 使用 scp 命令时 * 通配符出现 no matches 的错误
MacOS 升级后zsh 成了默认的 shell,顺应潮流开始了 zsh 的使用之旅。
今天使用 scp
复制远程多个文件时出现如下错误:
# 复制某个目录下的所有配置文件(*.conf)scp host:/xxxx/*.conf .
# 错误如下错误
# zsh: no matches found: host:/xxxx/*.conf
很肯定这条命令语句在bash 中能正常如期工作,出现这样的问题应该是 zsh 的锅。作为资深 linux 用户,可以很快看出了问题所在:zsh 试图将 * 通配符展开,在本地未找到对应文件,于是出现“no matches”的错误。
经过个人尝试以及网上搜索,有两种解决方案:
-
不要让 zsh 将 * 号展开;具体做法有:
- 将 * 号部分用引号引起来,单双引号都所无谓。例如:
scp "host:/xxxx/*.conf" .
,或者scp 'host:/xxxx/*.conf' .
。也可以只引用路径部分,例如:scp host:'/xxxx/*.conf' .
; - 用反斜杆阻止 zsh 转义:
scp host:/xxxx/\*.conf .
。
- 将 * 号部分用引号引起来,单双引号都所无谓。例如:
- 设置 nonomatch 选项,让 zsh 匹配失败时不报错并使用原本内容。具体做法是:
setopt nonomatch
,然后再使用scp
命令。推荐的做法是写入到.zshrc 文件中,让以后的使用中自动生效。
参考
- zsh 使用 scp 命令时 * 通配符无法使用