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

CHMOD sur plusieurs fichiers en ligne de commande

6 réponses
Avatar
Phil
Bonjour,

Je debute sous linux !

organisation de mes repertoires :
REP Courant
REP1
REP-A
FIL-A
REP2
REP-A
FIL-A
....

J'ai plusieurs REPERTOIRES qui ont le meme nom et plusieurs FICHIERS qui ont
le meme nom reparti dans different sous repertoires.

comment ne pas repeter le commande chmod plusieurs fois dans chaque sous
repertoire ?

CD REP1
chmod -v 700 REP-A
chmod -v 600 FIL-A
CD ..
CD REP2
chmod -v 700 REP-A
chmod -v 600 FIL-A
......

J'ai + de 60 REP1 ( a REP63) !!!!!

Une syntaxe recursive ?, un script apres recuperation de la liste a partir
de la commande ls ?

Merci de votre aide

Phil

6 réponses

Avatar
lhabert
La commande find est là pour ça. Elle permet de parcourir récursivement une
arborescence, et d'appliquer sélectivement des actions à certains fichiers.
Par exemple, si tu veux mettre en 700 les répertoires, et en 600 le reste,
tu peux faire :

find . '(' -type d -exec chmod 700 '{}' ';' ')' , '(' '!' -type d -exec chmod 600 '{}' ';' ')'

Cela spécifie deux expressions :

-type d -exec chmod 700 '{}' ';'
et

'!' -type d -exec chmod 600 '{}' ';'

séparées par une « , » qui indique d'exécuter les deux (on peut spécifier à
la place un « -a » ou un « -o », qui fonctionnent comme des && et || (i.e.
paresseux)).

Ces deux expressions seront appliquées sur tous les fichiers et répertoires
situés dans l'arborescence sous « . ». Elles contiennent toutes les deux une
condition (« -type d » et « '!' -type d »), la première est vraie ssi le
fichier en cause est un répertoire, et la seconde est la négation de la
première, et une action qui n'est exécutée que si la condition est vérifiée.

Dans les -exec, les « {} » sont remplacés par find par le nom du fichier, et
le « ; » marque la fin de la commande.
Avatar
Michel Tatoute
Phil wrote:

Bonjour,

Je debute sous linux !


Ok,

comment ne pas repeter le commande chmod plusieurs fois dans chaque sous
repertoire ?

CD REP1
chmod -v 700 REP-A
chmod -v 600 FIL-A
CD ..
CD REP2
chmod -v 700 REP-A
chmod -v 600 FIL-A
......



heuu..

chmod -v 700 REP*/REP-A
chmod -v 600 REP*/FIL-A

ca devrait le faire... non?

J'ai + de 60 REP1 ( a REP63) !!!!!

Une syntaxe recursive ?, un script apres recuperation de la liste a partir
de la commande ls ?

Merci de votre aide


de rien


Phil


Michel.

Avatar
Phil
Merci, c'est exactement ce qu'il me falait !

Phil

"Luc Habert" a écrit dans le message de news:
dnhec3$5iv$
La commande find est là pour ça. Elle permet de parcourir récursivement
une
arborescence, et d'appliquer sélectivement des actions à certains
fichiers.
Par exemple, si tu veux mettre en 700 les répertoires, et en 600 le reste,
tu peux faire :

find . '(' -type d -exec chmod 700 '{}' ';' ')' , '(' '!' -type d -exec
chmod 600 '{}' ';' ')'

Cela spécifie deux expressions :

-type d -exec chmod 700 '{}' ';'
et

'!' -type d -exec chmod 600 '{}' ';'

séparées par une « , » qui indique d'exécuter les deux (on peut spécifier
à
la place un « -a » ou un « -o », qui fonctionnent comme des && et || (i.e.
paresseux)).

Ces deux expressions seront appliquées sur tous les fichiers et
répertoires
situés dans l'arborescence sous « . ». Elles contiennent toutes les deux
une
condition (« -type d » et « '!' -type d »), la première est vraie ssi le
fichier en cause est un répertoire, et la seconde est la négation de la
première, et une action qui n'est exécutée que si la condition est
vérifiée.

Dans les -exec, les « {} » sont remplacés par find par le nom du fichier,
et
le « ; » marque la fin de la commande.




Avatar
Phil
Merci,

J'ai utiliser la solution de Luc, car REP1, REP2 etait pour l'example, en
realité mes repertoires non quasiment pas de points communs (*), c'est des
noms de personnes.

Phil

"Michel Tatoute" a écrit dans le message de news:
dnhen6$ptc$
Phil wrote:

Bonjour,

Je debute sous linux !


Ok,

comment ne pas repeter le commande chmod plusieurs fois dans chaque sous
repertoire ?

CD REP1
chmod -v 700 REP-A
chmod -v 600 FIL-A
CD ..
CD REP2
chmod -v 700 REP-A
chmod -v 600 FIL-A
......



heuu..

chmod -v 700 REP*/REP-A
chmod -v 600 REP*/FIL-A

ca devrait le faire... non?

J'ai + de 60 REP1 ( a REP63) !!!!!

Une syntaxe recursive ?, un script apres recuperation de la liste a
partir
de la commande ls ?

Merci de votre aide


de rien


Phil


Michel.




Avatar
l'indien
On Sun, 11 Dec 2005 14:50:43 +0000, Luc Habert wrote:

La commande find est là pour ça. Elle permet de parcourir récursivement une
arborescence, et d'appliquer sélectivement des actions à certains fichiers.
Par exemple, si tu veux mettre en 700 les répertoires, et en 600 le reste,
tu peux faire :

find . '(' -type d -exec chmod 700 '{}' ';' ')' , '(' '!' -type d -exec chmod 600 '{}' ';' ')'

Cela spécifie deux expressions :

-type d -exec chmod 700 '{}' ';'
et

'!' -type d -exec chmod 600 '{}' ';'

séparées par une « , » qui indique d'exécuter les deux (on peut spécifier à
la place un « -a » ou un « -o », qui fonctionnent comme des && et || (i.e.
paresseux)).

Ces deux expressions seront appliquées sur tous les fichiers et répertoires
situés dans l'arborescence sous « . ». Elles contiennent toutes les deux une
condition (« -type d » et « '!' -type d »), la première est vraie ssi le
fichier en cause est un répertoire, et la seconde est la négation de la
première, et une action qui n'est exécutée que si la condition est vérifiée.

Dans les -exec, les « {} » sont remplacés par find par le nom du fichier, et
le « ; » marque la fin de la commande.


chmod -R u+rwX * && chmod -R go-rwx *
aurait été plus simple, non ?

Avatar
David LE BOURGEOIS
Bonjour,


Bonsoir.

Je debute sous linux !

organisation de mes repertoires :
REP Courant
REP1
REP-A
FIL-A
REP2
REP-A
FIL-A
....

J'ai plusieurs REPERTOIRES qui ont le meme nom et plusieurs FICHIERS qui ont
le meme nom reparti dans different sous repertoires.

comment ne pas repeter le commande chmod plusieurs fois dans chaque sous
repertoire ?

CD REP1
chmod -v 700 REP-A
chmod -v 600 FIL-A
CD ..
CD REP2
chmod -v 700 REP-A
chmod -v 600 FIL-A
......

J'ai + de 60 REP1 ( a REP63) !!!!!

Une syntaxe recursive ?, un script apres recuperation de la liste a partir
de la commande ls ?

Merci de votre aide


find "REP Courant" -type f -print0 | xargs -r0 chmod 600
find "REP Courant" -type d -print0 | xargs -r0 chmod 700

--
David LE BOURGEOIS
e-mail : david.lebourgeois (at) free.fr
jabber : david.lebourgeois (at) jabber.fr