caractere curinga '*' não pode corresponder a alguma string?

7
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 a .php.swo e .php.swp
Por que * não pode corresponder a .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
    
por scrapy 02.03.2018 / 03:16

2 respostas

11

Os arquivos que começam com um ponto são ocultados das listagens de arquivos por padrão. A maneira mais fácil de combinar esse tipo de arquivo seria colocar um ponto no começo da expressão. No entanto, isso corresponderá apenas aos arquivos iniciados por . .

ls  -al  .*.swo

A alternativa é definir o dotglob antes de executar o comando, então os arquivos que começam com . serão incluídos.

shopt -s dotglob

Adicione ao seu ~/.bashrc para defini-lo por padrão.

Observe que a configuração dotglob pode levar a resultados não intencionais ao usar o shell bash, já que . (diretório atual) e .. (diretório pai) aparecerão quando usar * . Com dotglob set, nunca tente usar rm -R * .

    
por 02.03.2018 / 03:42
11

Como uma extensão à resposta do Shaido, gostaria de explicar por que a opção -a não funcionará aqui:

O comando ls não processa curingas. O interpretador da linha de comando faz este passo:

Se você digitar a linha de comando " mycommand *.c ", o interpretador da linha de comando substituirá primeiro a sequência 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, então não pode saber que -a significa "incluindo arquivos ocultos" no caso do comando ls (enquanto -a tem um significado totalmente diferente para outros comandos) ...

    
por 02.03.2018 / 08:58

Tags