scp ワイルドカードが zsh で動作しない

scp ワイルドカードが zsh で動作しない

zshに切り替えましたが、うまくいきます。 1つの奇妙なことは、*ワイルドカードを使用してscpを試みるときに機能せずにbashに入る必要があることです。以下の2番目のコマンドは正常に動作します。

これが起こる理由と解決策のアイデアはありますか?

~/dmp ⌚ 16:06:10
$ scp abc@123:/home/se/exports/201405091107/* .
zsh: no matches found: root@uf3:/home/se/exports/201405091107/*

~/dmp ⌚ 16:06:53
$ bash 
sean@seanlaptop:~/dmp$ scp abc@123:/home/se/exports/201405091107/* .

ベストアンサー1

abc@123:/home/se/exports/201405091107/*シェル(bashとzsh)は、ローカルシステム上のファイルと一致するglobとして解釈しようとします。シェルはそれが何であるかもしれずscp、リモートファイルと一致させようとするかもしれません。

bashとzshの違いは、ワイルドカードが失敗した場合のデフォルトの動作です。 Bashでは、globが何も一致しない場合、元のglobパターンを引数として渡します。 zsh ではエラーが発生します。

この問題を解決するには、シェルがそれをローカルglobとして解釈しないように引用する必要があります。

scp 'abc@123:/home/se/exports/201405091107/*' .

(その他同様の作業...1107/'*'...1107/\*作業も許可されています)

zsh の不一致が bash と同じように動作するように変更するには、次のようにします。

setopt nonomatch

おすすめ記事