Script Bash para encontrar o conteúdo do arquivo em um diretório e agregar valor

Script Bash para encontrar o conteúdo do arquivo em um diretório e agregar valor

Eu tenho um diretório com um grande número de arquivos. Eu quero escrever um script bash para -

  1. Entre nesse diretório
  2. Descubra quais deles são scripts Perl (mas nenhum deles tem extensão .pl)
  3. Adicione uma linha no topo de cada linha (pretendo adicionar um novo shebang) Se não for um script Perl, não faça nada

Não consigo procurar os scripts Perl, tentei usar o grep, mas não obtive o comando adequado. Além disso, a terceira etapa também é onde estou preso.

Responder1

O máximo que você pode fazer para encontrar os arquivos perl é usar o próprio perl para julgar.perl-cretorna um código de saída diferente de zero se o arquivo não for um código Perl correto, o que é definitivamente verdadeiro para a MAIORIA dos arquivos que não são Perl. Infelizmente, ele faz o mesmo quando é alimentado com código Perl defeituoso e retorna 0 quando o arquivo não é na verdade um código Perl, mas pode ser analisado sem erros como se fosse. Se você consegue conviver com esse risco, a essência dele pode ser esta:

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

Observação: assim que eu tocar nos arquivos de qualquer maneira, eu adicionaria a extensão .pl, a menos que haja algum motivo REALMENTE sério para ficar cego.

informação relacionada