Expansão interna com o comando find e caractere curinga [duplicado]

1

Eu ainda estou aprendendo a linha de comando e estou tendo algum problema em entender completamente o uso do curinga no comando find.

Estou trabalhando no diretório user / temp e use o comando find como segue para encontrar todos os arquivos .txt:

find . -name *.txt -print

Isso me dá o erro:

find: unknown primary or operator.

Eu sei que você precisa usar aspas simples em torno do *.txt para escapar da expansão e obter o resultado desejado; no entanto, não entendo por que isso precisa ser feito.

Eu li que você tem que escapar do * para que find faça a expansão internamente. Estou confuso porque achei que usar aspas simples em torno de * faria com que a linha de comando não a interpretasse como um caractere especial, então como ocorre a expansão?

    
por rriera96 30.10.2015 / 18:25

2 respostas

2

Há duas partes aqui que podem tentar expandir o * : o shell quando ele invoca find ou find enquanto está processando / usando seus argumentos.

Se você não citar, o shell irá expandi-lo, portanto, se você tiver a.txt e b.txt no diretório atual, sua linha de comando se expandirá de

find . -name *.txt -print

para

find . -name a.txt b.txt -print

que não é um comando find válido

Se você aspas simples, você irá dizer ao shell para deixá-lo sozinho, então find irá obter a string *.txt como o argumento para -name e ele irá usar como quando combinando nomes potenciais.

    
por 30.10.2015 / 18:33
0

Você pode tentar duplicar o nome do arquivo.

find . -name "*.txt" -print

Isso funciona no meu sistema (Debian 8)

    
por 30.10.2015 / 18:35