拡張に関する疑問

拡張に関する疑問

フォルダにあり、jpgファイルを見つけるには、次のように実行できます。

find -type f -name "*jpg"

しかし、なぜ二重引用符を使用するのか理解できません。それらがなければ、パス名の拡張によってfindコマンドがめちゃくちゃになることがわかりますが(フォルダに複数のjpgファイルがある場合)、正確な理由はわかりません。ここでは、引用文がなぜシェル拡張を避けないのか分かりません。

ベストアンサー1

二重引用符と一重引用符の両方がシェル内のファイル名の拡張を防ぎます。

Findは、ディレクトリのすべてのレベルを再帰的に探索するという点で少し特別です。

-nameコマンドでこのオプションを引用しないと、findシェルはfindを実行しているディレクトリ内の名前式をすぐに拡張します。これはファイルと0回、1回以上一致することがあります。

一致するシェルがない場合は、*jpgコマンドラインに再入力され、findオプションとして渡されます。

一致すると、実際の名前(たとえばK3256.jpg)がfindに渡されるため、その名前のファイルのみがサブディレクトリから取得されます。精密名前。

複数のエントリが一致すると、複数の名前がfindコマンドラインに入力され、引数の構文が正しくないため、findの実行が拒否されます。

Find自体は、入力するすべてのディレクトリでワイルドカードを拡張する役割を果たします。シェルが間違った助けを提供することを期待していません。

Shell は find を新しいプロセスとして呼び出す前に引用符を削除します。これにより、すべてのプログラムが厳密に言うと、シェル構文の一部である引用符を処理する必要がなくなります。子プロセスが引数を確認すると、その引数は null で終わる文字列配列に変換されたため、追加の変更は不要です。

このfindコマンドは、シェルとまったく同じ方法でファイル名拡張子を理解して機能します。違いは、findディレクトリのすべてのレベルが下に移動されることです。ディレクトリごとその中の名前のリストを読み、そのレベルの各名前を-nameパターンと一致させます。

また、この-type fオプションは各サブディレクトリ内でも機能します。ディレクトリエントリにもこの情報が含まれているため、findはディレクトリツリーの各ブランチで一致するファイルの種類と名前を再処理する必要があります。

また見てくださいこの回答

おすすめ記事