私はまだコマンドラインを学んでいるので、findコマンドのワイルドカードの使用を完全に理解するのに苦労しています。
私はuser / tempディレクトリで作業しており、次のfindコマンドを使用してすべての.txtファイルを見つけます。
find . -name *.txt -print
これによりエラーが発生します。
find: unknown primary or operator.
拡張を避け、目的の結果を得るには一重引用符を使用する必要があることを知っていますが、*.txt
なぜこれを行うのか理解できません。
*
内部的に拡張するには脱出する必要があると読みましたfind
。一重引用符を使用すると、*
コマンドラインで特殊文字として解釈されないと思ったので混乱しています。しかし、拡張はどのように起こりますか?
答え1
これには拡張を試みる2つの部分があります*
。つまり、シェルが呼び出されたとき、find
またはfind
引数が処理/使用されるときです。
一重引用符を使用しないと、シェルはそれを拡張するため、現在のディレクトリにa.txtとb.txtがある場合、コマンドラインは次から始まります。
find . -name *.txt -print
到着
find . -name a.txt b.txt -print
find
有効なコマンドではありません。
一重引用符で囲むと、シェルはそれを無視するように指示するため、シェルはその文字列を引数としてfind
取り、潜在的な名前を一致させるために使用します。*.txt
-name
答え2
ファイル名を二重引用符で囲むことができます。
探す。 - 名前 "*.txt" -印刷
これは私のシステム(Debian 8)で動作します。