
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 *.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 *
modo que find
faz 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 find
ou find
enquanto 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 find
comando válido
Se você colocar aspas simples, dirá ao shell para deixá-lo em paz, então find
obterá a string *.txt
como argumento -name
e 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)