![caractere curinga `* ` não pode corresponder a alguma string?](https://rvso.com/image/1554899/caractere%20curinga%20%60*%20%60%20n%C3%A3o%20pode%20corresponder%20a%20alguma%20string%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
*
pode corresponder .php.swo
e .php.swp
por que *
não pode corresponder .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
Responder1
Os arquivos que começam com um ponto ficam ocultos nas listagens de arquivos por padrão. A maneira mais fácil de combinar esses tipos de arquivos seria colocar um ponto no início da expressão. No entanto, isso corresponderá apenas aos arquivos que começam com .
.
ls -al .*.swo
A alternativa é definir dotglob
antes de executar o comando, então os arquivos começando com .
serão incluídos.
shopt -s dotglob
Adicione-o ao seu ~/.bashrc
para defini-lo como padrão.
Observe queconfiguração dotglob
pode levar a resultados indesejadosao usar o shell bash, pois ambos .
(diretório atual) e ..
(diretório pai) aparecerão ao usar *
. Com dotglob
conjunto,nuncatente usar rm -R *
.
Responder2
Como umextensãoà resposta de Shaido, gostaria de explicar por que a -a
opção não funcionará aqui:
O ls
comando faznãoprocessar curingas. O interpretador de linha de comando executa esta etapa:
Se você digitar a linha de comando " mycommand *.c
", o interpretador de linha de comando substituirá primeiro a string curinga " *.c
" pela lista de arquivos correspondentes e, em seguida, executará a linha de comando resultante:
mycommand a.c file.c test.c
O interpretador de linha de comando funciona da mesma maneira para todos os comandos, portanto não pode saber o que -a
significa "incluindo arquivos ocultos" no caso do ls
comando (embora -a
tenha um significado totalmente diferente para outros comandos)...