¿El carácter comodín `* ` no puede coincidir con alguna cadena?

¿El carácter comodín `* ` no puede coincidir con alguna cadena?
ls  -al  .functions*
-rw-r--r-- 1 root root 471040 Mar  2 10:01 .functions.php.swo
-rw-r--r-- 1 root root 438272 Mar  2 09:57 .functions.php.swp

*puede coincidir .php.swoy .php.swp
¿por qué *no puede coincidir .functions.php?

ls  -al  *.swo
ls: cannot access '*.swo': No such file or directory
ls  -al  *swo
ls: cannot access '*swo': No such file or directory

Respuesta1

Los archivos que comienzan con un punto están ocultos de las listas de archivos de forma predeterminada. La forma más sencilla de hacer coincidir ese tipo de archivos sería poner un punto al principio de la expresión. Sin embargo, esto solo coincidirá con archivos que comiencen con ..

ls  -al  .*.swo

La alternativa es configurar dotglobantes de ejecutar el comando, luego .se incluirán los archivos que comiencen con.

shopt -s dotglob

Agréguelo a su ~/.bashrcpara configurarlo de forma predeterminada.

Tenga en cuenta queLa configuración dotglobpuede conducir a resultados no deseados.cuando se usa el shell bash, ya que tanto .(directorio actual) como ..(directorio principal) aparecerán cuando se use *. Con dotglobconjunto,nuncatratar de usar rm -R *.

Respuesta2

como unextensiónA la respuesta de Shaido, me gustaría dar una explicación de por qué la -aopción no funcionará aquí:

El lscomando hacenoprocesar comodines. El intérprete de línea de comando realiza este paso:

Si escribe la línea de comando " mycommand *.c", el intérprete de la línea de comando primero reemplazará la cadena comodín " *.c" por la lista de archivos coincidentes y luego ejecutará la línea de comando resultante:

mycommand a.c file.c test.c

El intérprete de línea de comando funciona de la misma manera para todos los comandos, por lo que no puede saber qué -asignifica "incluidos archivos ocultos" en el caso del lscomando (aunque -atiene un significado totalmente diferente para otros comandos)...

información relacionada