Como encontrar arquivos que não contêm seu próprio nome de arquivo

1

Ao usar modelos para gerar arquivos, é importante incluir o nome do modelo dentro do modelo. Ao ler um arquivo gerado, ele ajuda a encontrar o modelo usado para gerá-lo.

Eu quero procurar por todos os modelos em um diretório que não contenha seu próprio nome de arquivo, imprima os que eu encontrar e saia com um código diferente de zero, se algum for encontrado.

Até agora, é isso que eu criei.

find . -name "*.xyz" -exec sh -c 'grep -L $(basename {}) {}' \;

Isso localiza e imprime os arquivos com êxito, mas sai com um código de saída 0, independentemente de serem encontrados ou não arquivos. Como posso encontrar os arquivos relevantes e sair com um código diferente de zero quando algum deles é encontrado?

    
por Craig 04.03.2014 / 23:26

3 respostas

1

How can I find the relevant files and exit with a non-zero code when any are found?

canalize o resultado para grep '' . A ferramenta não alterará o fluxo de texto, mas gerará o status de saída 0 ou 1 dependendo se alguma linha passar por ela ou não.

Eu sei que você quer do outro jeito. Se eu fosse você, aceitaria o comportamento de grep . Meu raciocínio é: você quer conhecer arquivos que atendam aos seus critérios; o comando os encontra, então sucede ao descobrir se há pelo menos um arquivo.

No entanto, se você insistir no comportamento oposto, apenas negue o status de saída . Exemplo:

! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''

Note que depurei a sua invocação sh dentro de find . Sua abordagem original se sairia em falso se {} fosse expandido para ./a;rm -rf ~;.xyz (é um nome de arquivo válido em muitos sistemas de arquivos Linux).

    
por 16.10.2018 / 12:04
0

Talvez algo como grep .... && <do if found> || <do if not found> faça o trabalho

    
por 04.03.2014 / 23:41
0
for f in *.xyz; do
    grep -q $f $f || echo "$f does not contain itself"
done

Ele fornecerá a lista de arquivos que você está procurando, embora ainda retorne um zero (porque o eco é bem-sucedido).

    
por 05.03.2014 / 01:09