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
パターンをテストします。-name
find
上記でテストした方法を使用すると、名前付きまたは名前付きディレクトリの下のどこかにあるファイルのみがsomeFile1.txt
返されsomeFile1.txt
ます。good
find
ファイルが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 \)