#1 Le 03/01/2008, à 11:13
- arnaud741
changement récursif (amélioré) de permissions
Salut à tous et à toutes !
Une petite astuce que j'ai utilisée hier... Certes, cette astuce est sans doute connue des plus expérimentés en scripts shell parmi nous, mais il me semble qu'elle pourrait se révéler utile aux débutants !
Le problème est le suivant : comment modifier récursivement des permissions en fonction du type de fichiers ? Par exemple, comment mettre tous ses dossiers en chmod 750 et tous ses fichiers en chmod 640 ? En effet, un chmod -R s'applique autant aux fichiers qu'aux dossiers et ne se révèle pas assez "pointu"...
La solution, pour les dossiers : find -type d -print0 | xargs -0 chmod 750
La solution, pour les dossiers : find -type f -print0 | xargs -0 chmod 640
Il me semble que ces 2 commandes sont limpides et peuvent presque se passer d'explications. La seule chose qui est un peu plus subtile, ce sont les options -print0 pour la commande find et -0 pour la commande xargs : elles sont tout simplement destinées à échapper les caractères spéciaux (espaces et autres), pour éviter des problèmes à la commande chmod !
Hors ligne
#2 Le 13/01/2008, à 16:11
- mpop
Re : changement récursif (amélioré) de permissions
Hello,
Merci pour l'astuce!
Pour pouvoir l'utiliser plus facilement, j'ai créé des alias dans mon fichier .bash_aliases:
# Quick chmod
alias rdirmod='find -type d -print0 | xargs -0 chmod'
alias rfilemod='find -type f -print0 | xargs -0 chmod'
alias rmod1='find -type d -print0 | xargs -0 chmod 755 && find -type f -print0 | xargs -0 chmod 644'
alias rmod2='find -type d -print0 | xargs -0 chmod 700 && find -type f -print0 | xargs -0 chmod 600'
J'utilise les deux premiers en leur passant le détail des permissions en paramètre, par exemple:
rdirmod 755
Les deux derniers sont «pré-configurés» pour des permissions 755/644 (dossiers/fichiers) et 700/600.
Récupérer des fichiers sur une clef USB en FAT 32 et leur assigner les permissions qui vont bien va devenir beaucoup plus facile.
Une question pour finir: j'ai remarqué que lorsque j'exécutais une de ces commandes depuis un dossier, cela changeait les permissions des fichiers et dossiers contenus dans le dossier courant mais aussi celles du dossier courant lui-même.
Pour ne pas prendre en compte le dossier courant, il faudrait procéder ainsi, non?
find * -type d -print0 | xargs -0 chmod 750
find * -type f -print0 | xargs -0 chmod 640
Je viens de tester et ça a l'air d'être le cas.
Du coup je suppose que je peux corriger mes alias ainsi:
# Quick chmod
alias rdirmod='find * -type d -print0 | xargs -0 chmod'
alias rfilemod='find * -type f -print0 | xargs -0 chmod'
alias rmod1='find * -type d -print0 | xargs -0 chmod 755 && find * -type f -print0 | xargs -0 chmod 644'
alias rmod2='find * -type d -print0 | xargs -0 chmod 700 && find * -type f -print0 | xargs -0 chmod 600'
Dernière modification par mpop (Le 13/01/2008, à 16:14)
« Covert prestige », c'est un terme de sociolinguisitique. William Labov pawaa!
Hors ligne