Changer toutes les permissions de fichiers et dossiers d'un répertoire en 644/755

Comment changer tous les fichiers en 644 et tous les dossiers en 755 en utilisant chmod de l'invite de commande linux ? (Terminal)

131
demandé sur emotality 2013-09-16 01:36:55

7 réponses

une approche pourrait utiliser find:

pour annuaires

find . -type d -print0 | xargs -0 chmod 0755

pour les fichiers

find . -type f -print0 | xargs -0 chmod 0644
274
répondu hugo der hungrige 2018-01-30 13:37:30

la façon la plus facile est de faire:

chmod -R u+rwX,go+rX,go-w /foo

qui signifie essentiellement:

à ch fichier ange mod es -R ecursively by giving:

  • u ser: r ead, w rite and e X ecute permissions,
  • g roupe et o ther utilisateurs: r ead et e X ecute des autorisations, mais pas -w rite de l'autorisation.

veuillez noter que X rendra un répertoire exécutable, mais pas un fichier, à moins qu'il ne soit déjà consultable/exécutable.

+X - faire un répertoire ou un fichier searchable/executable par tout le monde si elle est déjà searchable/executable par n'importe qui.

s'il vous Plaît cochez la case man chmod pour plus de détails.

voir aussi: Comment chmod tous les répertoires sauf les fichiers (récursivement)? à la LIGUE

73
répondu kenorb 2017-07-27 12:46:08

le plus court que j'ai pu trouver est:

chmod -R a=r,u+w,a+X /foo

qui fonctionne sur GNU / Linux, et je crois en Posix en général (d'après ma lecture de: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

ce n'est:

  1. définir fichier / répertoire à r _ _ r _ _ r _ _ (0444)
  2. ajouter w pour le propriétaire, pour obtenir rw _ _ r _ _ _ (0644)
  3. exécute pour tous si un répertoire (0755 pour dir, 0644 pour Fichier).

fait important, la permission de l'étape 1 efface tous les bits d'exécution, donc l'étape 3 ajoute seulement en arrière des bits d'exécution pour les répertoires (jamais des fichiers). En outre, les trois étapes se produisent avant qu'un répertoire soit recursed dans (Donc ce n'est pas équivalent à par exemple

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

puisque l'a=r supprime x des répertoires, alors chmod ne peut pas y revenir.)

15
répondu John Allsup 2016-12-26 12:52:05

cela a fonctionné pour moi:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;
8
répondu Jair Reina 2015-07-07 16:24:23

Faire les deux en un seul passage:

find -type f ... -o -type d ...

comme dans, Trouver le type f ou le type d, et faire le premier ... pour les fichiers et la seconde ... pour les dirs. Plus précisément:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

arrêtez le --changes si vous voulez que ça marche silencieusement.

6
répondu mza 2015-12-31 18:11:10

le plus facile pour moi de me souvenir est deux opérations:

chmod -R 644 dirName
chmod -R +X dirName

le + X n'affecte que les répertoires.

6
répondu Mark D 2016-05-17 23:08:41

Cela peut fonctionner aussi:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.
-5
répondu Puneet Tiwari 2016-06-01 11:41:55