Se você tem o grep do GNU
grep -rIzl '^#![[:blank:]]*/bin/sh' ./
Eu quero descobrir todos os scripts com uma linha específica da shebang. Especificamente, desejo todos os arquivos que correspondem aos seguintes critérios:
gzexe
não parecem muito amigáveis) #!/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.
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' _ {} \;
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