使用诸如rsync
和scp
之类的命令ZSH
时,我遇到了麻烦。它不会像 (正常) 那样向我提供所有匹配的文件,而是不会运行并返回:
➜ ~ rsync -azP user@server:~/* ~/
zsh: no matches found: user@server:~/*
我怎样才能解决这个问题?
我的.zshrc
ZSH=$HOME/.oh-my-zsh
ZSH_THEME="robbyrussell"
plugins=(git brew)
source $ZSH/oh-my-zsh.sh
export PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/sbin
答案1
这与 ZSH 如何管理通配符以生成文件名有关。默认情况下,ZSH 将生成文件名,如果未找到匹配项,则会在执行命令之前抛出错误。
有很多方法可以绕过这种行为,下面是其中一些:
- 最快的方法是用引号将通配符括起来。
$ rsync -azP "user@server:~/*" ~/
- 对于永久性更改,您必须在文件中添加以下内容
.zshrc
:
unsetopt nomatch
这将阻止 ZSH 在找不到匹配项时打印错误。
- 另一种可能性是使用命令修饰符禁用特定命令的通配符。例如,
noglob
通过设置别名:.zshrc
alias scp='noglob scp'
答案2
我已经使用 zpretzo 好几个月了,也遇到过这个问题。如果你不想做任何更改,我找到了一个简洁实用的解决方案:只需在命令前面加上反斜杠即可。
~/p/b/a/files ❯❯❯ scp *.* myserver@host:~/
*.*: No such file or directory
~/p/b/a/files ❯❯❯ \scp *.* myserver@host:~/
jquery.min.js 100% 93KB 92.6KB/s 00:00
json2.min.js 100% 3377 3.3KB/s 00:00
我希望这有帮助!
答案3
这解决了你的问题,无需手动引用 URL
autoload -U url-quote-magic
zle -N self-insert url-quote-magic
# sort it out for SCP
some_remote_commands=(scp rsync)
zstyle -e :urlglobber url-other-schema \
'[[ $some_remote_commands[(i)$words[1]] -le ${#some_remote_commands} ]] && reply=("*") || reply=(http https ftp)'