J'ai cette structure de répertoire:
~/tmp/globstar ɀ find dir -type f
dir/file.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
et, avec l' globstar
option activée dans Bash, je peux dire:
~/tmp/globstar ɀ ls -1 dir/**/*.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
Ma question est: pourquoi est dir/file.ext
exclu de cette liste?
Le manuel de Bash dit ceci à propos deglobstar
:
S'il est défini, le modèle «**» utilisé dans un contexte d'extension de nom de fichier correspondra à tous les fichiers et à zéro ou plusieurs répertoires et sous-répertoires. Si le modèle est suivi d'un '/', seuls les répertoires et sous-répertoires correspondent.
« Zéro » dans ce paragraphe m'a donné l'impression qu'il dir/file.ext
aurait dû être inclus; sauf si j'espère que je manque quelque chose.
ɀ
?unicode ɀ
ou Wikipediaɀ
est juste un caractère utilisé ici pour distinguer l'invite. Certains utilisateurs préfèrent le caractère£
ou€
au lieu de$
:). A l'origine,ɀ
un caractère 'z' créé pour une notation spéciale en langue africaine :-)Réponses:
Je suppose que cela se réfère uniquement au niveau du sous-répertoire.
**
sans/
allumettestous les fichiers et répertoires
zéro ou plusieurs sous-répertoires
Mais il ne disparaît pas complètement.
**/
signifie qu'aucun fichier du répertoire de plus haut niveau auquel**
s'applique ne correspond.Vous en avez besoin
dir/*.ext dir/**/*.ext
.la source
Cela fonctionne comme prévu dans ces versions de Bash fournies avec les distributions répertoriées:
En fait, les versions répertoriées ci-dessus sont tout ce que j'ai testé. En d'autres termes, je n'ai pas trouvé de version 4 de Bash où cela ne fonctionne pas. L'option a
globstar
été ajoutée dans Bash 4.0, voir MODIFICATIONS . Dans les anciennes versions, la commandeshopt -s globstar
devrait renvoyer une erreur.Les tests
1.
dir/**/*.ext
corresponddir/file.ext
:2.
**/*.ext
correspondfile.ext
:Préparation de l'environnement pour reproduire les tests ci-dessus:
la source
shopt -s globstar
.Il me semble que vous avez / avait éteint globstar. Il peut être activé comme ceci:
Non seulement il ne correspondra à aucun sous-répertoire, mais il ne correspondra pas non plus à deux sous-répertoires:
Avec globstar désactivé, ** finit par se comporter comme *, donc
dir/**/*.ext
obtient le même résultat quedir/*/*.ext
ce qui me fait parfois penser que globstar est sur
vérifiez votre paramètre globstar actuel comme ceci:
la source
shopt globstar
.