globalização recursiva ** / * e * / **

0

Estou aprendendo os wildcards recursive globbing e tentei

$ ls **/* | wc -l
15
$ ls */** | wc -l
15

Eles produzem resultados idênticos.

Existe alguma distinção entre **/* e */** ?

    
por JawSaw 31.10.2018 / 17:08

1 resposta

2

*/** corresponderá apenas aos diretórios (e seus subdiretórios e arquivos); ele não corresponderá aos arquivos (não-diretórios) no diretório atual, porque a parte */ dele requer um prefixo de diretório antes de iniciar a expansão ** globstar. Quanto ao **/* , o /* é estranho, já que o ** , por si só, se expandirá para todos os arquivos e diretórios no diretório atual (sujeito à opção dotglob ). Como cada diretório foi expandido nesse ponto, o /* final não corresponde a nada.

Tenha cuidado ao usar ls para testar, já que ele "ajudará" a ler em qualquer diretório que você possa passá-lo; considere, em vez disso, algo como:

printf "%s\n" */**
printf "%s\n" **/*

Observe também que a canalização para wc -l poderia enganá-lo nas contagens reais; considere:

$ touch a $'b\nc'
$ ls -1
a
b?c
$ ls | wc -l
3     ## WRONG!
    
por 31.10.2018 / 17:16