Expansão interna com o comando find e caractere curinga

Expansão interna com o comando find e caractere curinga

Ainda estou aprendendo a linha de comando e estou tendo problemas para entender completamente o uso do curinga no comando find.

Estou trabalhando no diretório user/temp e uso o comando find conforme a seguir 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 *.txtpara 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 *modo que findfaz a expansão internamente. Estou confuso porque pensei que usar aspas simples *faria com que a linha de comando não o interpretasse como um caractere especial, então como ocorre a expansão?

Responder1

Existem 2 partes aqui que podem tentar expandir o *: o shell quando ele está invocando findou findenquanto processa/usa seus argumentos.

Se você não colocar aspas simples, o shell irá expandi-lo, então se você tiver a.txt e b.txt no diretório atual, sua linha de comando será expandida de

find . -name *.txt -print

para

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

que não é um findcomando válido

Se você colocar aspas simples, dirá ao shell para deixá-lo em paz, então findobterá a string *.txtcomo argumento -namee a usará como ao combinar nomes em potencial.

Responder2

Você pode tentar citar duas vezes o nome do arquivo.

encontrar . -nome "*.txt" -imprimir

Isso funciona no meu sistema (Debian 8)

informação relacionada