J'ai une structure de répertoires avec des fichiers et des répertoires et j'aime attribuer des autorisations afin que tous les fichiers et répertoires disposent d'autorisations de lecture-écriture pour l'utilisateur et d'autorisations de lecture pour le groupe, ainsi que d'autorisations d'exécution sur le répertoire.
J'aimerais réaliser quelque chose comme ça:
$ ls -l
total 16
-rw-r----- 1 daniel daniel 0 5月 23 16:20 1
-rw-r----- 1 daniel daniel 0 5月 23 16:20 2
-rw-r----- 1 daniel daniel 0 5月 23 16:20 3
-rw-r----- 1 daniel daniel 0 5月 23 16:20 4
-rw-r----- 1 daniel daniel 0 5月 23 16:20 5
drwxr-x--- 2 daniel daniel 4096 5月 23 16:00 a
drwxr-x--- 2 daniel daniel 4096 5月 23 16:00 b
drwxr-x--- 2 daniel daniel 4096 5月 23 15:59 c
drwxr-x--- 2 daniel daniel 4096 5月 23 15:59 d
la source
Si vous voulez le faire de manière récursive, c'est -à- dire dans les répertoires d'un répertoire à l'autre, la commande à utiliser est la suivante:
Ceci localise tous les et les seuls sous-répertoires ( -type d ) du répertoire / path / to / begin / directory, puis effectue le changement requis de l'autorisation d'exécution à chacun d'entre eux. L'espace avant \; est obligatoire.
la source
Avez-vous essayé quelque chose comme:
chmod +x $(ls -p | grep /)
, cela ajoute la permission d’exécution à seulement les répertoireset si vous souhaitez autoriser l'exécution de fichiers et de répertoires, procédez comme suit:
chmod +x *
et pour supprimer les autorisations à exécuter sur les fichiers, essayez quelque chose comme ceci:chmod -x *.*
En espérant que ça aide
la source
*/
pouvez également utiliser des répertoires.ls
. Cela échouera même dans les cas les plus simples où les noms de répertoire contiennent des espaces.ls
?Essaye ça:
Explication
-mindepth 1
: C'est tellementfind
correspondent wont le répertoire courant,.
.-print0
: imprime une sortie séparée par un zéro. Cela garantit que nous traitons correctement les fioles contenant des nouvelles lignes.while IFS=
: le réglageIFS
sur la chaîne vide désactive le fractionnement des mots. Nécessaire pour les noms de fichiers / répertoires avec des espaces.read -r -d ''
: ceci lit chaque ligne$file
mais-r
garantit que nous ne traitons pas\
spécialement (s'il y en a dans vos noms de fichiers) et-d ''
définit le délimiteur sur la chaîne null afin que nousfind
analysions correctement la sortie et que nous puissions traiter les noms de fioles contenant des nouvelles lignes.if [ -d "$file" ]; then chmod 750 "$file";
: Si le$file
est un répertoire ([ -d "$file" ]
, définissez ses autorisations surdrwxr-x---
.else chmod 640 "$file"; fi
: si ce n'est pas un répertoire, définissez-les sur-rw-r-----
.la source
La majuscule
X
signifie qu'il n'est défini que s'il est déjà défini ailleurs. Comme tous vos répertoires sont déjà exécutables pour l'utilisateur, ils seront également rendus exécutables pour les groupes. Les fichiers n'étant pas exécutables pour l'utilisateur, ils ne le seront pas non plus pour les groupes.Utiliser
chmod +X
aura à peu près le même effet, sauf que, quand il donnera les droits d’exécution, il donnera les droits d’exécution à l’utilisateur, au groupe et aux autres.la source
Merci pour les réponses. J'ai constaté que pour attribuer des autorisations d'exécution uniquement aux répertoires, il est nécessaire d'utiliser les
X
autorisations majuscules .Donc, la commande serait la suivante:
http://www.manpagez.com/man/1/chmod/
(Cela m'a pris un certain temps pour trouver cela, alors je voulais partager avec tout le monde. Maintenant, je suppose que cette question sera indexée sur Google pour la prochaine personne qui veut savoir)
la source