Por que a barra invertida antes do asterisco está em 'find'?

8

Neste comando:

find . -name \*.pyc -delete

Por que uma barra invertida é necessária antes de *.pyc ?

    
por Ram Rachum 04.05.2014 / 15:31

2 respostas

18

Um glob sem aspas seria expandido pelo shell antes de find ser executado. (Consulte Expansão do nome de arquivo no manual.)

Assim dizendo:

find . -name *.pyc -delete

seria realmente executado:

find . -name file1.pyc file2.pyc file3.pyc -delete

assumindo que havia 3 arquivos .pyc no diretório atual e resultasse em um erro.

Uma barra invertida faz o shell passar o glob para find , ou seja, ele age como se *.pyc fosse citado.

Idealmente, você deve estar citando um glob:

find . -name '*.pyc' -delete
    
por 04.05.2014 / 15:36
4

Antes de o shell emitir o comando find , ele executará várias expansões . Ao fazer isso, ele também processa caracteres especiais (ou caracteres com significado especial), em que * é um caractere curinga - um caractere globbing. Esta é a chamada expansão de nome de arquivo.

Digamos que você tenha dois arquivos em seu diretório:

  • foo.pyc
  • bar.pyc

Em seguida, *.pyc se expandirá 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

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 evitar que ele seja interpretado pelo shell. Você faz isso por meio de escape de barra invertida ou, alternativamente, citando-o.

    
por 04.05.2014 / 15:35

Tags