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.
Vos réponses Page 1 / 2
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 -
naddy
Le #24092681
Olivier Burelli
$>find . -type d me retourne :

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



xargs(1)

--
Christian "naddy" Weisgerber
Marc
Le #24092381
Olivier Burelli wrote:

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.



Et ? Il y a X (man chmod) pour avoir un x sur les répertoires et pas
sur les fichiers.

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



Mauvaise idée, utiliser -exec (man find).
Olivier Miakinen
Le #24092371
Le 20/12/2011 15:27, Olivier Burelli a écrit :

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



Est-ce que ceci ne fonctionnerait pas ?

find . -type f -exec chmod 0660 '{}' ; -o -type d -exec
chown uid:gid '{}' ; -exec chmod 0770 '{}' ;
Alain Montfranc
Le #24092821
Christian Weisgerber a exposé le 20/12/2011 :
Olivier Burelli
$>find . -type d me retourne :



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



xargs(1)



+1

find -exec c'est crade car ça lance un sous process par occurence
trouvée alors que xargs groupe les arguments :-D
Arnaud Gomes-do-Vale
Le #24093531
Marc
Et ? Il y a X (man chmod) pour avoir un x sur les répertoires et pas
sur les fichiers.



Sur mon chmod (GNU coreutils 8.10), X ne sert pas à ça.

--
Arnaud
http://blogs.glou.org/arnaud/
Publicité
Poster une réponse
Anonyme