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 unextglobmodè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 autreextglobmodè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