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
これは、ZSHがファイル名を生成するためにグロビング文字を管理する方法に関連しています。デフォルトでは、ZSHはファイル名を生成し、一致するものが見つからない場合、コマンドを実行する前にエラーをスローします。
この動作を回避する方法はたくさんありますが、そのうちのいくつかを次に示します。
$ rsync -azP "user@server:~/*" ~/
.zshrc
ファイルに以下を追加する必要があります。unsetopt nomatch
これにより、一致するものが見つからない場合にZSHがエラーを出力しなくなります。
noglob
コマンド修飾子を使用して、特定のコマンドのグロビングを無効にすることです。 .zshrc
にエイリアスを設定する例:alias scp='noglob scp'
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
これが役に立てば幸いです!
これにより、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)'