(12 réponses)
Fermé il y a 6 ans.
Je veux regrouper tous les fichiers et répertoires cachés, mais pas le courant (.
) et répertoire parent (..
).
J'utilise bash.
Observez le comportement actuel :
$ ls -a
. .. ...a ...aa ..a ..aa .a .aa .aaa a
$ echo *
a
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Je voudrais .*
se comporter comme ça
$ echo .*
...a ...aa ..a ..aa .a .aa .aaa
Il y a l'option shell dotglob
$ shopt -s dotglob
cela fonctionne d'une certaine manière; maintenant je peux utiliser *
pour tout glob (caché ou non) mais pas .
et ..
$ echo *
...a ...aa ..a ..aa .a .aa .aaa a
mais maintenant je ne peux pas faire la différence entre caché ou non. Aussi, .*
toujours globs .
et ..
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Existe-t-il un moyen de créer .*
pas développer en .
et ..
?
Réponse acceptée :
Vous pouvez utiliser le GLOBIGNORE
variable pour masquer le .
et ..
répertoires. Cela définit également automatiquement le dotglob
option, donc *
correspond maintenant aux fichiers cachés et non cachés. Vous pouvez à nouveau désactiver manuellement dotglob
, cependant, cela donne alors le comportement que vous voulez.
Voir cet exemple :
$ ls -a
. .. a .a ..a
$ GLOBIGNORE=".:.."
$ shopt -u dotglob
$ echo * # all (only non-hidden)
a
$ echo .* # all (only hidden)
.a ..a