Como proteger expressões no comando 'find' da interpretação pelo shell?

3

Eu gostaria de executar o comando find . '! -name *.*' no shell bash . Não funciona como pretendido. (Ele deve listar todos os arquivos no diretório atual para o qual -name *.* é falso, ou seja, que não possuem um ponto em seus nomes.) Em vez disso, ele imprime uma lista de todos os arquivos no diretório e, paradoxalmente, termina com a linha %código%. Eu suspeito que o problema é a interpretação da expressão pelo shell, embora seja protegido pelos dois caracteres de apóstrofo (U + 0027). Existem maneiras de proteger a expressão de forma confiável independentemente da expressão?

Eu uso esta versão: find (GNU findutils) 4.4.2

    
por ngofo 25.03.2017 / 21:19

2 respostas

5

Devido a OP citando o expr '! -name *.*' , ele se transforma no segundo argumento para find . Então agora o que find pensa que você passou para ele 2 nomes de diretório, isto é, . e um nome louco ! -name *.* , então ele tentará listar todos os arquivos / subdiretórios recursivamente nesses dois. Com . até aí tudo bem, mas quando chega a hora de mergulhar nesse louco dir. ! -name *.* não pode, a menos que você tenha. E mesmo assim, find não estará fazendo o que você queria.

Para isso, você deve citar nos lugares apropriados:

find . ! -name '*.*'

ou

eval find . '! -name "*.*"'
    
por 25.03.2017 / 21:25
1

Tente colocar as aspas simples apenas na expressão.

find . ! -name '*.*'
    
por 25.03.2017 / 21:25