Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ksh : chmod récursif

17 réponses
Avatar
Olivier Burelli
bonjour,


je cherche =C3=A0 effectuer un changement de propri=C3=A9taire de mani=C3=
=A8re
r=C3=A9cursive sur l'arborescence du r=C3=A9pertoire 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=C3=A0 je coince, chmod attend un argument contrairement =C3=A0 un b=C3=AA=
te

$>ls -al | more=20

Certes, "more" ici est le pager prenant en compte la totalit=C3=A9 du
r=C3=A9sultat de la commande ls.

Dans mon cas, et pour chaque r=C3=A9sultat 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=C3=A9sultat du pipe en argument =C3=A0 =
chmod ?

Apr=C3=A8s lecture pas tr=C3=A8s bien comprise des commandes group=C3=A9es =
au sein d'un
m=C3=AAme shell via {} je ne sais, si c'est une piste pour ma probl=C3=A9ma=
tique,
ni comment l'impl=C3=A9menter.

Bien cordialement,

Olivier.

10 réponses

1 2
Avatar
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

cdt,

Olivier
Avatar
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 ?
Avatar
Paul Gaborit
À (at) Tue, 20 Dec 2011 13:39:36 +0100,
Olivier Burelli écrivait (wrote):

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 - <http://perso.mines-albi.fr/~gaborit/&gt;
Avatar
Olivier Burelli
Le Tue, 20 Dec 2011 13:51:17 +0000 (UTC),
Marc a écrit :

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
Avatar
Paul Gaborit
À (at) Tue, 20 Dec 2011 13:10:52 +0100,
Olivier Burelli écrivait (wrote):

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 - <http://perso.mines-albi.fr/~gaborit/&gt;
Avatar
naddy
Olivier Burelli wrote:

$>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
Avatar
Marc
Olivier Burelli wrote:

Le Tue, 20 Dec 2011 13:51:17 +0000 (UTC),
Marc a écrit :

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).
Avatar
Olivier Miakinen
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 '{}' ;
Avatar
Alain Montfranc
Christian Weisgerber a exposé le 20/12/2011 :
Olivier Burelli wrote:

$>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
Avatar
Arnaud Gomes-do-Vale
Marc writes:

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/
1 2