encontrar por nome ou por grep

0
find . -perm -u+x,g+x,o+x -type f -exec grep -i -l -H -E '#!/bin/bash|#!/bin/sh' {} \; 2>/dev/null 1>/$user_scripts

Estou encarregado de encontrar qualquer script que possa existir para N usuários em 4 pastas. Eu estarei usando ssh e executando o comando acima para gerar uma lista de arquivos para uso posterior. Alguns scripts com a extensão de arquivo .sh e .bash que não contêm #! / Bin / bash | #! / Bin / sh não são encontrados.

Eu preciso melhorar isso, mas estou lutando para encontrar algo que funcione no servidor Solaris para o qual não tenho direitos de administrador (nenhum software / biblioteca especial). Se possível, eu preferiria não precisar executar outro script que apareceria desnecessariamente em cada lista para cada usuário.

Basicamente eu preciso de algum tipo de "If (find ou grep)" na mesma linha. Isso é possível?

    
por JaredTS486 07.10.2015 / 19:42

1 resposta

1

Você pode fazer isso OR usando partes diferentes do comando find . Considere dividir seus critérios de seleção em três partes: requisitos necessários para todos os arquivos (permissões, etc.) e, em seguida, OU arquivos nomeados OU aqueles com um cabeçalho apropriado.

Isso pode ser expresso com find como este (dividido em várias linhas aqui apenas para legibilidade):

find . -perm -u+x,g+x,o+x -type f \(
    -name '*.sh' -o
    -name '*.bash' -o
    -exec grep -il -E '^#!/bin/bash|^#!/bin/sh' {} \;
\) 2>/dev/null >/$user_scripts
    
por 07.10.2015 / 20:09