名前に特定の文字列を含むファイルを検索するためにgrepを使用できますか?

名前に特定の文字列を含むファイルを検索するためにgrepを使用できますか?

私が知る限り、grepコンテンツに文字列を含むファイルを検索するためにのみ使用できます。

名前に文字列を含むファイルを検索するために使用できますか?マンページを読みましたが、そうは思いません。

grep[gri:p]または[grep](IPA表記)でも発音されますか?私は電子を読んだ。

答え1

あなたは以下を探しているようですfind

find . -type f -name "*foo*"

foo名前を含むファイル名は、現在のディレクトリとサブディレクトリから検索されます。

find . -maxdepth 1 -type f -name "*foo*"

foo現在のディレクトリに含まれているファイル名のみを探します。

答え2

findファイル名のリストを生成した後に解析するために使用されますgrep

find . | grep 'stack[oO0]verfl[oO0]w'

ファイル名のリスト自体がファイルであるファイルシステムがない場合は、自分でこれを行う方法がわかりませんgrep

答え3

楽しむために、grepそれ自体を使用して現在のディレクトリに(空ではない)ファイル名を生成し、目的のgrepファイルを見つけるために別のファイルを生成できます。

grep -l . * 2>/dev/null | grep 'your_pattern'

オプションを指定せずにディレクトリを検索するように求めると文句を言うので、2>/dev/nullこれは必須です。grep-r

警告:名前に改行文字を含むファイルでは正しく機能せず、ドット(隠し)ファイルと空のファイルは無視されます。findここではこれが正しいアプローチです。

答え4

あなたの質問に答えるなら、いいえです。 Grepはファイル名で検索できず、提供されたテキストデータのみを検索できます。したがって、デフォルトでは2つのオプションがありますgrep

ユーザーが提供したファイルのリストを検索してから、grep各ファイルを順番に開いて検索するように指示したパターンを見つけるか、標準入力を介してデータストリームを供給できます。

どちらの場合も、grep入力ソース(STDINまたはファイル)の周りの「メタデータ」を見ることはできず、その内容のみを見ることができます。

関連情報