ループを使用してファイルの文字列を確認します。

ループを使用してファイルの文字列を確認します。

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

関連情報