Grepは、ディレクトリとその子孫のすべてのファイルの最初の行で文字列を探します。

Grepは、ディレクトリとその子孫のすべてのファイルの最初の行で文字列を探します。

現在のディレクトリ内のすべてのファイルで特定の文字列を見つけ、最初の行だけを再帰的に考慮するにはどうすればよいですか? (#!行がある場合、しかし#!が行1にある場合のみ)?

答え1

grepを強制的に使用しない場合:

find . -type f -exec \
  awk 'FNR==1 && /GIVEN_STRING/ { print FILENAME ": " $0; }; FNR>1 {nextfile}' {} +

これは、1つのプロセス(またはごく少数のプロセス)がすべてのタスクを実行できるため、CPU負荷が大幅に減少する結果をもたらします。

答え2

この試み:

find . -type f -exec head -1 {} \; | grep "GIVEN_STRING"

関連情報