OVH Cloud OVH Cloud

chmod et perl

2 réponses
Avatar
ozit
Bonjour,

Je n'ai vraiment pas le niveau en script perl et je fais donc appel à votre
bonté :
dans un script :
/etc/e-smith/events/actions/user-create-unix sur un serveur SME
il y a une ligne :
chmod 0xxx, "/home/e-smith/files/users/$userName";
ou xxx sont des permissions qui sont attribuées au repertoire
/home/e-smith/files/users/$userName


J'aimerai seulement savoir comment faire pour faire en sort que cette
commande s'applique aux sous repertoires et fichiers.
L'equivalent sous bash : chmod xxx -R /DOSSIER .

J'ai cru lire qu'il fallait faire des scripts de 30 lignes pour avoir une
fonction pour la reccursivité !

Merci de votre aide

2 réponses

Avatar
Seb
ozit wrote:
Bonjour,

Je n'ai vraiment pas le niveau en script perl et je fais donc appel à
votre bonté :
dans un script :
/etc/e-smith/events/actions/user-create-unix sur un serveur SME
il y a une ligne :
chmod 0xxx, "/home/e-smith/files/users/$userName";
ou xxx sont des permissions qui sont attribuées au repertoire
/home/e-smith/files/users/$userName


J'aimerai seulement savoir comment faire pour faire en sort que cette
commande s'applique aux sous repertoires et fichiers.
L'equivalent sous bash : chmod xxx -R /DOSSIER .

J'ai cru lire qu'il fallait faire des scripts de 30 lignes pour avoir
une fonction pour la reccursivité !

Merci de votre aide


Ca doit être faisable avec la commande 'system' je pense, non?

system "chmod xxx -R $dossier";

Avatar
Paul Gaborit
À (at) Fri, 8 Oct 2004 15:05:19 +0200,
"Seb" écrivait (wrote):
Ca doit être faisable avec la commande 'system' je pense, non?

system "chmod xxx -R $dossier";


Pour être sûr de son coup et aller plus vite, il vaut mieux utiliser 'system'
sans passer par le shell :

system '/usr/bin/chmod', '-R', 'xxx', $dossier;

(où xxx représente les droits en octal)

Seul problème : cette commande ne fonctionne pas bien. Elle applique les mêmes
droits aux répertoires et aux fichiers. Donc, à moins que tous les fichiers
soient des exécutables, les répertoires risquent de devenir inaccessibles.

Il vaut mieux un truc du genre :

system '/usr/bin/chmod', '-R', 'a+rX', $dossier;

L'astuce est dans le 'X' (cf. man chmod). Pour ce qui précède (a+r), il faut
l'adapter en fonction du 'xxx' précédent.

ozit wrote:
J'ai cru lire qu'il fallait faire des scripts de 30 lignes pour avoir
une fonction pour la reccursivité !



Vous pouvez utiliser File::Find ou gérer vous-même la récursivité. Find::Find
contient bien plus de 30 lignes mais il est déjà écrit. Si vous le faites
vous-même, il est possible de le faire en une dizaine de lignes si
l'organisation du répertoire et son contenu est simple. Mais si vous voulez
gérer tous les cas possibles (liens symboliques récursifs, liens cassés,
fichiers spéciaux, etc.), vous retomberez sur un code aussi long que
File::Find.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>