
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
コードはゼロになり、条件はFALSEなので文をバイパスしますthen
。