6
votes

Pourquoi le mode récursif sur chmod fait-il tout sauf récursivité?

chmod -r 775 * .cgi ne modifie que des autorisations sur les fichiers du répertoire actuel, les fichiers du sous-répertoire ne sont pas modifiés du tout. Ceci est la même fonctionnalité exacte que simplement faire chmod 775 * .cgi . J'ai vu des personnes utilisent des solutions telles que trouver et ce que rien. Ok excellent, mais pourquoi -r -r est-il même s'il n'existe même rien?


1 commentaires

Cool merci pour toutes les réponses. Les réponses expliquant à l'aide de la recherche étaient utiles, mais j'ai sélectionné la réponse de MSW parce que j'étais plus curieux de ce que le -r fait. Je n'ai choisi que les MSW au lieu de Matthew's depuis que MSW était légèrement légèrement légèrement.


5 Réponses :


16
votes

Probablement parce que vous n'avez aucun répertoire nommé *. CGI code>. Quotez le manuel :

-r strong> modifier récursivement les bits de mode fichier. Pour chaque fichier opérande qui nomme un répertoire, chmod doit changer le fichier Mode bits du répertoire et tout fichiers dans la hiérarchie de fichier ci-dessous. p> blockQuote>

Par exemple: P>

$ ls -R
.:
a  a.c  b.c  c.c

./a:
a.c  b.c  sub

./a/sub:
a.c  b.c  
$ chmod -R 444 *.c
$ ls -l
drwxr-xr-x 3 msw msw 4096 2010-08-12 18:07 a
-r--r--r-- 1 msw msw    0 2010-08-12 18:07 a.c
-r--r--r-- 1 msw msw    0 2010-08-12 18:07 b.c
-r--r--r-- 1 msw msw    0 2010-08-12 18:07 c.c
$ : directory a not affected
$ chmod -R u-w a    
$ ls -l a
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 a.c
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 b.c
dr-xr-xr-x 3 msw msw 4096 2010-08-12 18:07 sub
$ ls -l a/sub
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 a.c
-r-xr-xr-x 1 msw msw    0 2010-08-12 18:07 b.c
$ : got em


0 commentaires

10
votes

-r indique chmod pour recueillir dans n'importe quel répertoires qui sont donnés en tant qu'arguments.

Si vous dites chmod -r 775 * .cgi , la coque va développer *. CGI dans une liste de fichiers correspondant à ce motif et transmet que comme le Liste des arguments - donc chmod n'est pas invité à regarder dans d'autres répertoires.

(it va recueille dans n'importe quel qui correspond *. CGI ...)


1 commentaires

Oh Gotcha. Il est donc utile de changer de manière récursive tous les fichiers sous un certain répertoire.



7
votes

Pour accomplir ce que vous voulez essayer xxx

ici Rechercher génère une liste de tous les fichiers avec un .cgi finissant de la Annuaire actuel vers le bas et passe cette liste à Xargs qui applique chmod à chacun.


0 commentaires

4
votes

*. CGI est développé par votre shell dans une liste de tous les noms de fichiers de l'annuaire actuel terminant dans .cgi . Alors l'enveloppe appelle chmod avec cette liste des noms de fichiers.

chmod regarde tous les noms de fichiers que cela a eu du shell, change de modes et recueille si une partie de eux étaient des répertoires. Mais probablement aucun d'entre eux n'est, alors il n'y a rien à recueil.

Pour trouver tous les fichiers CGI dans le répertoire actuel et ses sous-répertoires et exécuter chmod sur eux, vous pourriez faire : xxx


1 commentaires

Cette réponse est la même DMCkee



3
votes

* est une coque intégrée, tandis -r est une option de ligne de commande. Donc, chmod n'obtiendra jamais * comme un argument.

Mettez le cas que FOO0.CGI et FOO1.CGI sont le contenu du répertoire. Si vous tapez chmod -r o + r * .cgi alors chmod obtiendra le "-r", "O + R '," FOO0.CGI "et" FOO1 .cgi 'comme arguments.

Ce que vous voulez faire peut être accompli facilement: xxx


1 commentaires

Cette réponse est la même DMCkee