GNT sans publicité, site mobile, fonctionnalitées exclusives...

ksh : chmod récursif

Le
Olivier Burelli
bonjour,


je cherche à effectuer un changement de propriétaire de maniÃ=
¨re
récursive sur l'arborescence du répertoire courant.

1) la commande find est mon ami puisque :

$>find . -type d me retourne :

.
./rep1
./rep1/subrep1
./rep1/subrep2/subsubrep


2) fort de ce constat, je souhaite renvoyer via un pipe cette sortie
vers la commande chmod

là je coince, chmod attend un argument contrairement à un bê=
te

$>ls -al | more

Certes, "more" ici est le pager prenant en compte la totalité du
résultat de la commande ls.

Dans mon cas, et pour chaque résultat je dois effectuer une action
chmod.

Je ne souhaite pas obtenir la commande ou le script fonctionnel de
votre part.

Juste une explication :

comment dois-je transmetre chaque résultat du pipe en argument à =
chmod ?

Après lecture pas très bien comprise des commandes groupées =
au sein d'un
même shell via {} je ne sais, si c'est une piste pour ma probléma=
tique,
ni comment l'implémenter.

Bien cordialement,

Olivier.
Lire les 17 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Burelli
Le #24091551
j'ai oublié de préciser que je me suis penché sur :

for i in `find . -type d`;
do
chmod 0770 $i;
done

cela fonctionne, je reste interrogatif, je cherchais à obtenir le
résultat en utilisant un pipe.

Voir même savoir qu'elle est l'état de l'art :p

cdt,

Olivier
Marc
Le #24091811
Olivier Burelli wrote:

je cherche à effectuer un changement de propriétaire de manière
récursive sur l'arborescence du répertoire courant.



option -R ?
Paul Gaborit
Le #24092031
À (at) Tue, 20 Dec 2011 13:39:36 +0100,
Olivier Burelli
j'ai oublié de préciser que je me suis penché sur :

for i in `find . -type d`;
do
chmod 0770 $i;
done

cela fonctionne, je reste interrogatif, je cherchais à obtenir le
résultat en utilisant un pipe.

Voir même savoir qu'elle est l'état de l'art :p



La commande chmod possède déjà un mode récursif (l'option -R).

Pour appliquer une commande à *chaque* résultat trouvé par 'find', il
vaut mieux utilisé l'option '-exec' :

find . -type d -exec chmod 0770 '{}' ;

(c'est la syntaxe d'un find à la linux.)

Si on souhaite appliquer une commande à plusieurs résultats d'un coup,
on peut utiliser :

find . -type d -exec chmod 0770 '{}' +

(toujours la syntaxe d'un find à la linux.)

Pour utiliser un pipe, il faut faire attention aux noms contenant des
espaces et donc utiliser l'option '-print0' de find puis récupérer tout
cela avec xargs et son option '-0' pour construire une ligne de commande
pas trop longue.

find . -type d -print0 | xargs -0 chmod 0770


--
Paul Gaborit -
Olivier Burelli
Le #24091901
Le Tue, 20 Dec 2011 13:51:17 +0000 (UTC),
Marc
Olivier Burelli wrote:

> je cherche à effectuer un changement de propriétaire de mani ère
> récursive sur l'arborescence du répertoire courant.

option -R ?



chmod -R impacte aussi bien les fichiers que les répertoires.

donc j'abordais mon problème ainsi :


for i in `find . -type d`; do chown uid:gid $i; chmod 0770 $i; done
for i in `find . -type f`; do chmod 0660 $i; done


je souhaitais savoir comment effectuer la même chose via un pipe.

find . -type d | chmod $permission
Paul Gaborit
Le #24092251
À (at) Tue, 20 Dec 2011 13:10:52 +0100,
Olivier Burelli
je cherche à effectuer un changement de propriétaire de manière
récursive sur l'arborescence du répertoire courant.


[...]

Dans mon cas, et pour chaque résultat je dois effectuer une action
chmod.



chmod, c'est pour modifier les droits d'accès.
chown, c'est pour modifier le propriétaire.

Que voulez-vous faire réellement ?

--
Paul Gaborit -
Publicité
Suivre les réponses
Poster une réponse
Anonyme