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.

7 réponses

1 2
Avatar
Benoit Izac
Bonjour,

le 20/12/2011 à 18:57, Alain Montfranc a écrit dans le message
<4ef0cc7d$0$2524$ :

find -exec c'est crade car ça lance un sous process par occurence
trouvée alors que xargs groupe les arguments :-D



C'est parfaitement faux car find sait aussi regrouper, il suffit de lui
demander :

% cat nb_args.sh
printf '%sn' $#
% find / -exec sh nb_args.sh {} + 2>/dev/null
2538
2744
1714
2019
1911
1819
3880
3614
[...]

--
Benoit Izac
Avatar
Marc
Arnaud Gomes-do-Vale wrote:

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.



Ah ? Il sert à quoi alors ? Posix dit :
"The perm symbol X shall represent the execute/search portion of the
file mode bits if the file is a directory".
Avatar
Arnaud Gomes-do-Vale
Marc writes:

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



Ah ? Il sert à quoi alors ? Posix dit :
"The perm symbol X shall represent the execute/search portion of the
file mode bits if the file is a directory".



Le chmod des coreutils positionne le bit x pour les répertoire et pour
les fichiers qui ont déjà au moins un x (utilisateur, groupe ou reste du
monde). J'ignorais que ce n'était pas standard, j'avoue.

Je viens de vérifier, ça marche pareil sous MacOSX et sous
DragonflyBSD.

--
Arnaud
http://blogs.glou.org/arnaud/
Avatar
Marc
Arnaud Gomes-do-Vale wrote:

Marc writes:

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



Ah ? Il sert à quoi alors ? Posix dit :
"The perm symbol X shall represent the execute/search portion of the
file mode bits if the file is a directory".



Le chmod des coreutils positionne le bit x pour les répertoire et pour
les fichiers qui ont déjà au moins un x (utilisateur, groupe ou reste du
monde). J'ignorais que ce n'était pas standard, j'avoue.



Ben si c'est standard, justement. Je ne comprends toujours pas le "X
ne sert pas à ça"...
Avatar
Arnaud Gomes-do-Vale
Marc writes:

Ben si c'est standard, justement. Je ne comprends toujours pas le "X
ne sert pas à ça"...



Je ne suis pas sûr de ne pas avoir lu de travers, du coup. J'ai compris
que tu suggérais d'utiliser «chmod -R +X» pour poser le bit x sur les
répertoires uniquement et je faisais remarquer que ça touchera aussi à
certains autres fichiers (ceux qui ont déjà un bit x quelque part). Mais
en remontant le fil je ne suis plus très sûr que ce soit le sujet. :-)

--
Arnaud
http://blogs.glou.org/arnaud/
Avatar
Marc
Arnaud Gomes-do-Vale wrote:

Marc writes:

Ben si c'est standard, justement. Je ne comprends toujours pas le "X
ne sert pas à ça"...



Je ne suis pas sûr de ne pas avoir lu de travers, du coup. J'ai compris
que tu suggérais d'utiliser «chmod -R +X» pour poser le bit x sur les
répertoires uniquement et je faisais remarquer que ça touchera aussi à
certains autres fichiers (ceux qui ont déjà un bit x quelque part). Mais
en remontant le fil je ne suis plus très sûr que ce soit le sujet. :-)



Ah, je vois. La question d'origine était de mettre les fichiers à 660
et les répertoires à 770, il me semble, donc un problème différent.
Mais je suis d'accord que si on veut juste ajouter un x à une
hiérarchie de répertoires, ça risque de poser problème.
Avatar
Olivier Burelli
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





Je pense que c'est exactement ce que je souhaitais obtenir. Je vais de
ce pas effectuer un man xargs pour mieux comprendre le tout.

Merci pour vos explications.

Je souhaite remercier l'ensemble des intervenants pour leur pertinence.

Cdt,

Olivier.
1 2