![¿El carácter comodín `* ` no puede coincidir con alguna cadena?](https://rvso.com/image/1554899/%C2%BFEl%20car%C3%A1cter%20comod%C3%ADn%20%60*%20%60%20no%20puede%20coincidir%20con%20alguna%20cadena%3F.png)
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.swo
y .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 dotglob
antes de ejecutar el comando, luego .
se incluirán los archivos que comiencen con.
shopt -s dotglob
Agréguelo a su ~/.bashrc
para configurarlo de forma predeterminada.
Tenga en cuenta queLa configuración dotglob
puede 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 dotglob
conjunto,nuncatratar de usar rm -R *
.
Respuesta2
como unextensiónA la respuesta de Shaido, me gustaría dar una explicación de por qué la -a
opción no funcionará aquí:
El ls
comando 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é -a
significa "incluidos archivos ocultos" en el caso del ls
comando (aunque -a
tiene un significado totalmente diferente para otros comandos)...