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.
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.

Poser une question


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
option -R ?
Olivier Burelli
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 -
Marc
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
Olivier Burelli
[...]
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 -