(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