
膨大な数のファイルがあるディレクトリがあります。Bashスクリプトを書きたいのですが、
- そのディレクトリに入る
- どれが Perl スクリプトであるかを調べます (ただし、拡張子が .pl のものは存在しません)
- 各行の先頭に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 拡張子を追加します。