ディレクトリ内のファイルの内容を検索し、値を追加する Bash スクリプト

ディレクトリ内のファイルの内容を検索し、値を追加する Bash スクリプト

膨大な数のファイルがあるディレクトリがあります。Bashスクリプトを書きたいのですが、

  1. そのディレクトリに入る
  2. どれが Perl スクリプトであるかを調べます (ただし、拡張子が .pl のものは存在しません)
  3. 各行の先頭に1行追加します(新しいシェバンを追加するつもりです)Perlスクリプトでない場合は何もしません

Perl スクリプトを検索できません。grep を使用してみましたが、適切なコマンドが取得できません。また、3 番目のステップでも行き詰まっています。

答え1

perl ファイルを見つけるためにできる最善のことは、perl 自体を使用して判断することです。パール -cファイルが正しい Perl コードでない場合は、ゼロ以外の終了コードを返します。これは、Perl ではないほとんどのファイルで間違いなく当てはまります。残念ながら、欠陥のある Perl コードが入力された場合も同じ結果になり、ファイルが実際には Perl コードではないが、Perl コードであるかのようにエラーなしで解析できる場合は 0 を返します。そのリスクを受け入れられるのであれば、その核心は次のようになります。

for FILE in * ; do
   if perl -c "$FILE" >/dev/null ; then
      sed -i -e '1i#!/usr/bin/perl' "$FILE"
   fi
done

注: いずれにせよ、ファイルに触れる場合は、本当に重大な理由がない限り、.pl 拡張子を追加します。

関連情報