Je veux effectuer une action (dites chown
) sur tous les fichiers cachés d'un répertoire.
Je sais que ce .*
n'est pas une bonne idée car il trouvera également le .
actuel et parent ..
répertoires (je sais que rm
ne fonctionnera pas sur .
et ..
mais d'autres commandes, y compris chown
et chmod
, prendra effet avec plaisir)
Mais tous mes fichiers cachés ont des noms différents !
Comment dois-je glob pour tous les fichiers cachés tout en excluant .
et ..
?
Réponse acceptée :
Vous pouvez utiliser le extglob
suivant motif :
[email protected](!(.|))
-
.
correspond à un.
littéral au début -
@()
est unextglob
modèle, correspondra à l'un des modèles à l'intérieur, car nous n'avons qu'un seul modèle à l'intérieur, il choisira celui-ci -
!(.|)
est un autreextglob
modèle (imbriqué), qui correspond à n'importe quel fichier avec aucun ou un.
; Comme nous avons fait correspondre.
déjà au début, ce modèle complet correspondra à tous les fichiers commençant par.
sauf.
et..
.
extglob
est activé sur les sessions interactives de bash
par défaut dans Ubuntu. Si ce n'est pas le cas, activez-le d'abord :
shopt -s extglob
Exemple :
$ echo [email protected](!(.|))
.bar .foo .spam