Je veux effectuer une action (disons chown
) sur tous les fichiers cachés dans un répertoire.
Je sais que ce .*
est pas une bonne idée car il trouvera également les répertoires .
et parent ..
actuels (je sais que rm
ne fonctionnera pas avec .
et ..
, mais d’autres commandes, notamment chown
et chmod
, heureusement prendra effet)
Mais tous mes fichiers cachés ont des noms différents!
Comment dois-je parcourir pour tous les fichiers cachés en excluant .
et ..
?
Vous pouvez utiliser le modèle extglob
suivant:
.@(!(.|))
.
correspond à un littéral .
au début
@()
est un modèle extglob
, correspond à l'un des modèles à l'intérieur, car nous n'avons qu'un seul modèle à l'intérieur, il choisira
!(.|)
est un autre modèle extglob
(imbriqué), qui correspond à tout fichier ne contenant aucun ou un .
; Comme nous avons déjà apparié .
au début, ce modèle entier correspond à tous les fichiers commençant par .
à l'exception de .
et de ..
.
extglob
est activé sur les sessions interactives de bash
par défaut sous Ubuntu. Sinon, activez-le d'abord:
shopt -s extglob
Exemple:
$ echo .@(!(.|))
.bar .foo .spam
GLOBIGNORE=".:.."
cacher le. et .. répertoires. Cela définit également l'option dotglob
: *
correspond aux fichiers cachés et non cachés.
Vous pouvez aussi faire
shopt -s dotglob
Vous pouvez utiliser une commande find
ici. Par exemple, quelque chose comme
find -type f -name ".*" -exec chmod 775 {} \;
Cela va trouver les fichiers cachés et changer les permissions
Modifier pour inclure le commentaire de @gerrit:
find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;
Cela limitera la recherche en haut du répertoire en cours au lieu d'une recherche récursive.