Linuxでディレクトリ名を再帰的に検索する方法
Linuxでは、すべてがディレクトリに保存されます。bashスクリプトを作成するときは、ディレクトリを名前で検索すると便利なことがよくあります。幸い、このコマンドを使用find
して、ディレクトリ名を再帰的に検索し、一致するものを表示できます。
ディレクトリを検索する
このコマンドfind
は、Linuxでディレクトリを検索するために使用されます。デフォルトでは完全に再帰的であるため、すべてのサブディレクトリで一致するものを探します。
-type d
フラグを使用するfind
と、「ディレクトリモード」で機能し、どのファイルとも一致しないディレクトリのみを検索します。これを一緒に使用して-name
、名前でディレクトリを検索できます。
find. -type d -name "search"
このコマンドは現在のディレクトリで実行されますが、などの他のディレクトリを検索することもできます~
。
を使用する際の問題-name
は、直接名とのみ一致することです。つまり、完全修飾ディレクトリ名と一致しない場合は機能しません。ただし、ワイルドカードを使用してこの問題を解決できます。ワイルドカードを検索文字列の前後に配置すると、ディレクトリ名の任意の場所の部分文字列と一致します。ファイル名も含める場合は、ワイルドカードを使用して、特定の拡張子で終わるファイルを照合できます。
find. -type d -name "*search*"
ただし、これはディレクトリ名とのみ一致し、親ディレクトリは無視されます。ファイルパス全体を使用して照合する場合は、以下で説明する正規表現オプションを使用する必要があります。
find
一致するすべてのディレクトリのリストが出力されますが、絶対パスまたは相対パスを一貫して使用するように注意する必要があります。これは最終的な回答に影響するためです。「現在のディレクトリ」のドットなどの相対パスを使用する場合、回答は相対パスになります。ただし、パスを直接指定すると、現在のディレクトリであっても、ルートから始まる絶対パスになります。
find
また、テキスト検索だけでなく、タイムスタンプ、ファイルサイズ、その他のLinux識別子に基づいてファイルを照合するためにも使用できます。-exec
また、すべてのファイルまたはディレクトリでコマンドを実行するために使用することもできます。
正規表現で検索する
よりfind
高度な正規表現(Regex)フィルタリングを使用して、複雑な検索に一致するものを見つけることもできます。
正規表現を使用する主な利点の1つは、それにつながるベースディレクトリを含むディレクトリ全体に一致することです。
-regex
の代わりに正規表現を使用できます-name
。sed
また、と互換性のある正規表現を含めることも役立ちます-regextype sed
。
探す。-type d -regextype sed -regex“。* one \ /.*”
この例では、正規表現は.*one
「1」で終わるすべてのディレクトリを照合することから始まります。ドットとワイルドカードは、これより前のサブストリングと一致します。次に、スラッシュをエスケープ\/
してディレクトリの末尾に一致させ、その後に別のワイルドカードを使用して任意のディレクトリ名に一致させます。
一般に、これは、サブディレクトリであっても、親が「1」で終わるディレクトリに一致します。正規表現は強力な表現であり、表現が必要なものと正確に一致するように注意する必要があります。それ以上でもそれ以下でもありません。
検索でgrepを使用する
find
生のディレクトリリストを出力することもできるため、他のコマンドに渡して処理することができます。たとえばgrep
、テキスト検索ユーティリティとして使用され、コマンドラインですばやく使用して簡単な検索と強調表示を行います。
find. -type d | grep foo
grep
は完全な検索ユーティリティでもあり、正規表現などのツールとともに使用して検索を改善できます。詳細については、それを使用するためのガイドをお読みください。
コメントを残す