En este comando:
find . -name \*.pyc -delete
¿Por qué se necesita una barra invertida antes *.pyc?
En este comando:
find . -name \*.pyc -delete
¿Por qué se necesita una barra invertida antes *.pyc?
Respuestas:
El shell expandiría un globo sin comillas antes de findejecutarlo. (Consulte Expansión del nombre de archivo en el manual).
Entonces diciendo:
find . -name *.pyc -delete
en realidad ejecutaría:
find . -name file1.pyc file2.pyc file3.pyc -delete
suponiendo que haya 3 archivos .pyc en el directorio actual y que en su lugar se produzca un error.
Una barra invertida hace que el shell pase el globo a find, es decir, actúa como si *.pycse citara.
Idealmente, debería citar un globo:
find . -name '*.pyc' -delete
Antes de que su shell emita el findcomando, realizará varias expansiones . Al hacerlo, también procesa caracteres especiales (o caracteres con un significado especial), donde *hay un comodín: un carácter global. Esta es la llamada expansión de nombre de archivo.
Digamos que tiene dos archivos en su directorio:
foo.pycbar.pycLuego *.pycse expandiría a ambos nombres. Entonces si escribes:
find . -name *.pyc -delete
entonces el shell realmente llamará:
find . -name foo.pyc bar.pyc -delete
lo cual no tiene mucho sentido, porque solo puede tener un argumento para -name. Es por eso que necesita escapar del carácter especial para evitar que sea interpretado por el shell. Lo haces escapándose con una barra invertida o, alternativamente, citandolo.
finddebe tener una sección llamadaNON-BUGScon algo similar como ejemplo y una explicación de por qué es necesaria.