Linuxでコンテンツの代わりにファイル名を検索するためにgrepする方法

Linuxでコンテンツの代わりにファイル名を検索するためにgrepする方法

grep は、特定のコンテンツのテキストファイルを検索するために一般的に使用されるLinuxツールです。ただし、ファイルの内容ではなくファイル名をディレクトリで検索すると便利なことがよくあります。これは、grep 他のLinuxコマンドラインユーティリティを使用して実行できます。

grepの代わりにfindを使用する

ユーティリティgrep は基本的に、ファイルまたは標準入力から文字列入力を受け取り、パターンまたは正規表現を使用してそれらを検索し、一致する文字列を出力します。

技術的grep には、コンテンツの代わりにファイル名を検索するために使用できますが、これはLinuxがファイル名の入力にワイルドカードを許可しているためです。ただし、ls この方法でファイルを簡単に一覧表示したり、他のコマンドでワイルドカードを使用したりすることはできます。これは、grep コンテンツ検索のようにファイル名を検索するための実際のソリューションではありません。

grep "". /file* -l

実際の解決策は、find サブディレクトリを検索でき、ファイルシステムと直接対話するため、ファイルを見つけるための最も信頼性の高い方法を提供するユーティリティを使用することです。これは最も一般的に使用されるディレクトリ検索ユーティリティであり、パターンマッチングや正規表現のサポートなど、多くのオプションがあります。

最も簡単な使用法は、find 単独で使用して、に入力するサブディレクトリやパイプを含むファイルを一覧表示することgrepです。を使用するスクリプトがすでにある場合はgrep、この方法に一致するようにスクリプトを変換するのはかなり簡単です。

find | grep "file"

テンプレートをで直接使用することもできfind、の必要がなくなりgrepます。入力で使用-iname します。

find. -iname 'file_*.txt'

grep ただし、このfindコマンドとは異なり、もう少し厳密です。検索文字列をエスケープするには一重引用符または二重引用符を使用する必要があり、文字列全体を照合するにはワイルドカードを使用する必要があります。名前の残りの部分と一致させるためにワイルドカードを使用しないと、名前の部分文字列を単純に検索することはできません。

検索で正規表現(Regex)を使用する

で正規表現を使用することもできますfind。これにより、はるかに複雑なマッチングが可能になります。

find. -regex './file.*'

この正規表現は、「file」で始まる現在のディレクトリ内のすべてのファイルと一致します。-inameただし、これは;とは異なる動作をすることを知っておくことが重要です。入力にはディレクトリへのフルパスが含まれ./ 、相対パスをエスケープするため  に使用する必要があります./

ここに示すコマンドは./subdirectory/ 、「file」で始まらないため、フォルダーを除外します。これを修正するには、最後のスラッシュにつながるすべてのものを次のように一致させる必要があります.*/

find. -regex '.*/file.*'

正規表現は非常に複雑ですが、非常に強力です。詳細を知りたい場合は、それらがどのように機能するかについてのガイドを読むことができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です