Neste comando:
find . -name \*.pyc -delete
Por que uma barra invertida é necessária antes *.pyc
?
Neste comando:
find . -name \*.pyc -delete
Por que uma barra invertida é necessária antes *.pyc
?
Respostas:
Um globo não citado seria expandido pelo shell antes de find
ser executado. (Consulte Expansão do nome do arquivo no manual.)
Dizendo assim:
find . -name *.pyc -delete
realmente executaria:
find . -name file1.pyc file2.pyc file3.pyc -delete
assumindo que havia 3 arquivos .pyc no diretório atual e resultando em um erro.
Uma barra invertida faz com que a concha passe o globo para find
, isto é, age como se tivesse *.pyc
sido citada.
Idealmente, você deve citar um globo:
find . -name '*.pyc' -delete
Antes de seu shell emitir o find
comando, ele fará várias expansões . Ao fazer isso, ele também processa caracteres especiais (ou caracteres com significado especial), onde *
existe um curinga - um caractere brilhante. Essa é a chamada expansão de nome de arquivo.
Digamos que você tenha dois arquivos no seu diretório:
foo.pyc
bar.pyc
Então *.pyc
expandiria para os dois nomes. Então, se você escrever:
find . -name *.pyc -delete
então o shell realmente chamará:
find . -name foo.pyc bar.pyc -delete
o que não faz muito sentido, porque você só pode ter um argumento para -name
. É por isso que você precisa escapar do caractere especial para impedir que ele seja interpretado pelo shell. Você faz isso escapando pela barra invertida ou, alternativamente, citando-o.
find
deve ter uma seção chamadaNON-BUGS
com algo semelhante como exemplo e uma explicação de por que é necessário.