Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/12/2010, à 14:25

abelthorne

[résolu] chmod : différencier fichiers et dossiers ?

Bonjour,
Pour commencer, je précise que contrairement à ce que laisse supposer le titre, je sais parfaitement qu'un dossier est un fichier avec juste un flag spécifique. Mais on va dire que c'est différent pour le problème que j'ai. wink

J'avais tout un tas de fichiers sur une partition en FAT32, que j'ai déplacés sur une partition en EXT4. Étant donné que je montais la partition FAT avec un umask de 000 pour pouvoir écrire dessus sans problème, tous mes fichiers se retrouvent avec les droits en 777.

Je voudrais supprimer le flag exécutable récursivement sur tous les fichiers. Sans toucher aux dossiers, bien sûr, puisque si je vire le flag dessus, on ne peut plus aller dedans et chmod ne peut même plus traiter leur contenu (la récursivité s'arrête au premier niveau).
Est-ce qu'il y aurait une option de chmod qui lui dit de ne pas traiter les dossiers ? je ne trouve rien dans le man...

Dernière modification par abelthorne (Le 30/12/2010, à 15:56)

Hors ligne

#2 Le 30/12/2010, à 14:33

Tomzz

Re : [résolu] chmod : différencier fichiers et dossiers ?

Bonjour,
Voilà une ligne que jutilise pour un cas similaire:

find . -type d -print0 | xargs -0 chmod 755 && find . -type f -print0 | xargs -0 chmod 645

On a donc un chmod 755 pour les dossiers et un 645 pour les fichiers.
A adapter aux droits souhaités et à exécuter dans le dossier à traiter.

PS: j'avoue ne pas savoir exactement à quoi sert xargs -0, si quelqu'un peut expliquer.

Hors ligne

#3 Le 30/12/2010, à 14:49

abelthorne

Re : [résolu] chmod : différencier fichiers et dossiers ?

Et ce serait récursif à partir de l'endroit où on lance cette commande ?

Hors ligne

#4 Le 30/12/2010, à 14:51

iuchiban

Re : [résolu] chmod : différencier fichiers et dossiers ?

abelthorne a écrit :

Et ce serait récursif à partir de l'endroit où on lance cette commande ?

OUI, le find est recursif.


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#5 Le 30/12/2010, à 14:53

Zakhar

Re : [résolu] chmod : différencier fichiers et dossiers ?

@Tomzz

La réponse à ta question est dans le man ou ici en ligne

En gros c'est une question de terminaison et de séparateur d'arguments produits par la commande précédente.
find -print0 est explicitement cité par le man comme étant conçu pour fonctionner avec l'option -0 de xargs.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#6 Le 30/12/2010, à 15:05

Vysserk3

Re : [résolu] chmod : différencier fichiers et dossiers ?

Un truc pas très propre (et moins souple que les solutions précédentes) :
D'après le man de chmod :

The letters rwxXst select file mode bits for the affected users: read (r), write (w), execute (or  search  for
       directories)  (x),  execute/search  only if the file is a directory or already has execute permission for some
       user (X), set user or group ID on execution (s), restricted deletion flag or sticky bit (t).  Instead  of  one
       or  more of these letters, you can specify exactly one of the letters ugo: the permissions granted to the user
       who owns the file (u), the permissions granted to other users who are members of the file's group (g), and the
       permissions granted to users that are in neither of the two preceding categories (o).

En gros :
- x c'est pour fichiers ET dossiers.
- X c'est pour dossier seulement.
Donc ce qu'il faudrait faire c'est un chmod -x sur tous les fichiers et dossiers récursivement puis un chmod +X récursivement. Ainsi seuls les dossiers récupéreront le flag exécutable wink

Hors ligne

#7 Le 30/12/2010, à 15:11

Tomzz

Re : [résolu] chmod : différencier fichiers et dossiers ?

C'est un peu flou (mauvais anglais et vocabulaire d'autodidacte...) mais si j'ai bien compris, xarg sert à passer chaque résultats de find un par un à chmod.
C'est ça ?


PS: parce que si c'est ça, je dois pouvoir virer un paquet de boucles for que j'ai fais dans certains de mes scripts roll

Dernière modification par Tomzz (Le 30/12/2010, à 15:12)

Hors ligne

#8 Le 30/12/2010, à 15:16

abelthorne

Re : [résolu] chmod : différencier fichiers et dossiers ?

Vysserk3 a écrit :

Donc ce qu'il faudrait faire c'est un chmod -x sur tous les fichiers et dossiers récursivement puis un chmod +X récursivement. Ainsi seuls les dossiers récupéreront le flag exécutable wink

Ça me plaît déjà plus, sauf que ça va pas marcher : en enlevant le flag x des dossiers (via la première commande), ça va bloquer la récursivité au premier niveau puisque chmod ne pourra pas entrer dedans pour traiter la suite.

Dernière modification par abelthorne (Le 30/12/2010, à 15:16)

Hors ligne

#9 Le 30/12/2010, à 15:20

Tomzz

Re : [résolu] chmod : différencier fichiers et dossiers ?

Ça me plaît déjà plus

Pourquoi ?
Si "ma" commande, présente un soucis particulier, ça m'intéresse de le savoir parce que je l'utilise assez souvent (je l'ai même intégrée dans certains tutos) wink

PS:  je confirme qu'elle est récursive.

Dernière modification par Tomzz (Le 30/12/2010, à 15:21)

Hors ligne

#10 Le 30/12/2010, à 15:24

abelthorne

Re : [résolu] chmod : différencier fichiers et dossiers ?

Tomzz a écrit :

Pourquoi ?
Si "ma" commande, présente un soucis particulier, ça m'intéresse de le savoir parce que je l'utilise assez souvent (je l'ai même intégrée dans certains tutos) wink

Parce qu'en règle générale, je préfère utiliser une seule commande que de passer par find (surtout quand je ne comprends pas la syntaxe). C'est juste que j'aime pas find.
En-dehors de ça, pas de souci particulier dans ta commande, je vais la tester tout à l'heure.

Hors ligne

#11 Le 30/12/2010, à 15:29

redo_fr

Re : [résolu] chmod : différencier fichiers et dossiers ?

Plus simple encore qu'avec xargs smile

find <rep> -type f -exec chmod a-x {} \;

Il n'y a pas de mauvais outils, il n'y a que de mauvais ouvriers
- papy -
Personnellement, je crois que faire des procès est un signe que les affaires vont mal. Je ne dis pas que Microsoft va mal, ce n'est qu'un signe, pas un indicateur...
- Linus Torvalds -

Hors ligne

#12 Le 30/12/2010, à 15:35

Vysserk3

Re : [résolu] chmod : différencier fichiers et dossiers ?

Aussi plutôt qu'un args derrière un find, il vaut mieux privilégier l'option -exec de find qui fait pareil (avec une syntaxe assez particulière certes).

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 645 {} \;

Sinon pour en revenir à ma commande, je pense qu'avec un sudo devant le find, tu devrais pouvoir "traverser" tous les dossiers sans effectivement le problème que tu signalais wink

Hors ligne

#13 Le 30/12/2010, à 15:56

abelthorne

Re : [résolu] chmod : différencier fichiers et dossiers ?

J'ai utilisé la commande de redo_fr, tout a l'air ok.

Merci, je passe en résolu. smile

Hors ligne