Encontre todos os scripts com uma determinada linha shebang com find & sed

0

Eu quero descobrir todos os scripts com uma linha específica da shebang. Especificamente, desejo todos os arquivos que correspondem aos seguintes critérios:

  • É principalmente um arquivo de texto simples (os materiais criados por gzexe não parecem muito amigáveis)
  • A primeira linha contém somente #!/bin/sh ou #! /bin/sh (com um espaço)

Eu gostaria de fazer isso com find , sed e grep ( file available).
Nomes de arquivos são inúteis, porque alguns scripts não possuem extensões ou possuem extensões incorretas. Também um something.sh pode ter uma linha shebang de #!/bin/bash , que também não é o que eu queria.

Além disso, às vezes eu encontrava um arquivo como este:


#!/bin/sh
blah.blah.blah...

A primeira linha está vazia e a shebang está localizada na segunda linha, que não é o que eu queria .
Consigo encontrar linhas shebang com find|grep , mas não sei como encontrar linhas especificamente na primeira linha de um arquivo.
Obrigado por qualquer ajuda antecipadamente.

    
por iBug 02.04.2017 / 06:45

3 respostas

1

Se você tem o grep do GNU

grep -rIzl '^#![[:blank:]]*/bin/sh' ./
    
por 02.04.2017 / 11:28
0

Se você não se importa com qual linha o #!/bin/sh ocorre em um arquivo, tente:

find -type f -exec bash -c 'grep -r "^#!.*\/bin\/sh" $1 1> /dev/null && echo $1' _ {} \;

    
por 02.04.2017 / 10:22
0
for f in ./*; do
   [ -f "$f" ] && [ -x "$f" ] &&
      file -b "$f" | grep -wq text &&
         head -n 1 "$f" | grep -qP '^#!\s*/bin/sh' &&
            printf '%s\n' "$f"
done
    
por 02.04.2017 / 11:21