web-dev-qa-db-ja.com

zshのコマンドでワイルドカードを使用する

rsyncscpなどのコマンドを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
40
Morgan

これは、ZSHがファイル名を生成するためにグロビング文字を管理する方法に関連しています。デフォルトでは、ZSHはファイル名を生成し、一致するものが見つからない場合、コマンドを実行する前にエラーをスローします。

この動作を回避する方法はたくさんありますが、そのうちのいくつかを次に示します。

  • 最も速いのは、グロビング文字を引用符で囲むことです。
$ rsync -azP "user@server:~/*" ~/
  • 恒久的な変更を行うには、.zshrcファイルに以下を追加する必要があります。
unsetopt nomatch

これにより、一致するものが見つからない場合にZSHがエラーを出力しなくなります。

  • もう1つの可能性は、noglobコマンド修飾子を使用して、特定のコマンドのグロビングを無効にすることです。 .zshrcにエイリアスを設定する例:
alias scp='noglob scp'
52
Spack

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

これが役に立てば幸いです!

8
superuseroi

これにより、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)'
3
Francisco