
ステートメントで指定された文字列で始まるディレクトリ内のファイルをループ処理しようとしています。ループ内で、ファイル内のfor
パターン文字列を検索します。ファイル内に文字列が見つかった場合は、を実行します。foo
echo
$filename
#!/ppp/bash
for filename in $(find ~/filesList -type f -name "pge_*")
do
#If 'foo' located echo $filename
done
ご提案があれば、ぜひお聞かせください。
答え1
find
実行に使用しますgrep
:
find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +
-l
に一致するものを含むファイル名を一覧表示しますfoo
。-F
は、式がfoo
正規表現ではなく固定文字列として扱われることを意味します。
答え2
find
最初の提案 - ループ内でを使用する必要はありませんfor
。速度が低下します。代わりに、次のようにすることができます。
for f in ~/filesList/pge_*
かなり重要な注意点は、この簡略化されたバージョンでは バージョンのサブディレクトリが検索される~/filesList
のに対しfind
、 は検索されないため、実際の使用例によっては簡略化できない可能性があるということです。
これらのファイル内の検索については、次grep
のような構造を使用する必要があります。
if (grep needle haystack > /dev/null 2>&1)
then
echo $f
fi
が探している針を見つけるとgrep
、ゼロ以外の値を返すため、条件は TRUE と評価されます。 を使用して、> /dev/null 2>&1
の結果が表示されないようにしますgrep
。 が干し草の山で針を見つけられない場合grep
、戻りコードは 0 であるため、条件は FALSE となり、ステートメントをバイパスしますthen
。