再帰的にファイルを検索し、特定の部分文字列に一致するパスでフィルタリングします。

再帰的にファイルを検索し、特定の部分文字列に一致するパスでフィルタリングします。

Linux初心者を完了し、ファイル名を見つけてそのパスを一覧表示し、特定の部分文字列を含むパスでのみ結果セットをさらにフィルタリングするコマンドの助けが必要です。

たとえば、次のファイル名がありますsomeFile.txt。このファイル名は複数のディレクトリに存在できます。

例えば/some/directory/path/good/someFile.txt/some/directory/path/bad/someFile.txt

findを使用すると、ファイルへのすべてのパスを含むリストを返すことができますが、パス名に「good」のみを含むパスも返したいと思います。この例では、変数パス名が多いため、ホワイトリストを作成する方が望ましいが、「良い」という用語を含むパス名も許可されることがわかります。

これが私が持っているものです。

$ find . -type f \( -name someFile1.txt -o -name someFile2.txt\)

私も次のことを試しましたが、役に立ちませんでした。

$ find . -type f \(-name someFile1.txt -o -name someFile2.txt\) -print0 | xargs -0 grep -rl 'good'
$ find . -type f \(-name someFile.txt .... | xargs -0 grep 'good'
$ find . -type f \(-name someFile.txt .... | xargs -0 egrep 'good|real_good'

答え1

使用-pathテストfind:

find . -path '*/good/*' -type f \( -name someFile1.txt -o -name someFile2.txt \)

テストは同様に機能しますが、現在検討中のファイルのフルパス名に対して-pathパターンをテストします。-namefind

上記でテストした方法を使用すると、名前付きまたは名前付きディレクトリの下のどこかにあるファイルのみがsomeFile1.txt返されsomeFile1.txtます。goodfind

ファイルがgoodその下のサブディレクトリーではなくディレクトリーに存在する必要がある場合は、次のようにします。

find . -type f \( -path '*/good/someFile1.txt' -o -path '*/good/someFile2.txt' \)

またはそのようなもの。

someFile1.txt明らかに、andという実際のファイルを探している場合は、2つの別々のテストの代わりにsomeFile2.txtそのパターンを使用します。someFile[12].txt

意見を見ると、使いたいことが明らかです。

find . -type f \
    \( -ipath '*realgood*' -o -ipath '*real_good*' \) \
    \( -name someFile1.txt -o -name someFile2.txt  \)

関連情報