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 find
ejecutarlo. (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 *.pyc
se citara.
Idealmente, debería citar un globo:
find . -name '*.pyc' -delete
Antes de que su shell emita el find
comando, 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.pyc
bar.pyc
Luego *.pyc
se 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.
find
debe tener una sección llamadaNON-BUGS
con algo similar como ejemplo y una explicación de por qué es necesaria.