¿Por qué barra invertida antes del asterisco en `find`?


9

En este comando:

find . -name \*.pyc -delete

¿Por qué se necesita una barra invertida antes *.pyc?


La página de manual para finddebe tener una sección llamada NON-BUGScon algo similar como ejemplo y una explicación de por qué es necesaria.
Brian

Respuestas:


19

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

@RamRachum, pero más caracteres al escribir.
Paul Draper

1
@PaulDraper Legible y menos propenso a errores> Más corto por una pulsación de tecla
Pomo

Las comillas simples son el camino a seguir. Nunca pensé que podría usar la barra invertida de esta manera ...
Floris

4

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.pyc
  • bar.pyc

Luego *.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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.