Uso de localização para pesquisar e relatar arquivos que tenham uma, mas não duas palavras-chave dentro

1

Gostaria de usar a localização para relatar arquivos nas seguintes condições:

  1. Se o arquivo contiver a palavra "Serializable"
  2. Em seguida, informe o arquivo se ele NÃO contiver a palavra "serialVersionUID"

Algo como:

find . -name "*.java" -exec grep "Serializable" {} \; <magic stuff here> grep "serialVersionUID" {} \; -print

Então eu estou fumando crack e seria melhor servido pelo awk?

Obrigado pela sua ajuda.

    
por D-Klotz 23.10.2014 / 21:46

1 resposta

2

O -exec do operando de find é avaliado como verdadeiro se o comando for bem-sucedido (ou seja, retornar zero) e falso se falhar (retorna diferente de zero). pode usar o sucesso / falha de grep como parte da expressão usada por find .

Juntamente com o operando find ! , que nega o seguinte operando, você pode procurar por arquivos para os quais um comando grep é bem-sucedido e outro comando grep falhar:

find . -name "*.java" \
    -exec grep -q "Serializable" {} ";" -a \
    ! -exec grep -q "serialVersionUID" {} ";" -a -print

A opção -q informa grep para não imprimir nada; estamos interessados apenas em seu valor de retorno.

O operando -a não é estritamente necessário, mas não atrasa as coisas e eu gosto de usá-lo quando existe a possibilidade de a expressão ficar ainda mais complexa e exigir -o ou parênteses.

    
por 23.10.2014 / 23:17

Tags