changement de chmod pour les fichiers mais pas les répertoires
J'ai besoin d'utiliser la commande chmod pour modifier tous les fichiers recursivly à 664. Je voudrais sauter les dossiers.
Je pensais faire quelque chose comme ceci
ls -lR | grep ^-r | chmod 664
Cela ne fonctionne pas, je suppose, car je ne peux pas le tuyau en chmod
Quelqu'un connais un moyen facile de faire cela?
Grâce
- Ce doit être demandé dans ServerFault
- chmod devrait vraiment être en mesure de différencier entre des fichiers, des liens, et des dossiers sur son propre.
Vous devez vous connecter pour publier un commentaire.
Un
find -exec
réponse est un bon un, mais il souffre de la généralement hors de propos lacune qu'il crée un sous-processus pour chaque fichier. Cependant, il est parfaitement fonctionnel et ne procédera à mal lorsque le nombre de fichiers est vraiment grand. À l'aide dexargs
lot jusqu'les noms de fichiers dans les grands groupes avant l'exécution d'un sous-processus pour que groupe de fichiers.Vous avez juste à être prudent en utilisant
xargs
, vous gérer correctement les noms de fichiers avec des espaces, retours à la ligne ou d'autres caractères spéciaux.Une solution qui résout ces deux problèmes est (en supposant que vous avez une assez décent
find
etxargs
mise en œuvre):La
-print0
causesfind
de résilier les noms de fichier sur ses flux de sortie avec un NUL de caractères (plutôt que par un espace) et le-0
àxargs
permet de savoir qu'il doit s'attendre à ce que le format d'entrée.chmod
, ce n'est pas un problème.xargs
lots les choses intelligemment.getconf ARG_MAX
de voir cette limite.-L num
option pourxargs
dans les cas où nous avons trop de fichiers et d'exécuter dansArgument list too long
question d'essayer de faire un seulchmod
sur chacun d'eux.-n/-L
options de simplement permettre la poursuite de l'arbitraire des limites sur la taille des lots.Une autre façon de le faire est d'utiliser
find ... -exec ...
comme suit:Le problème est que le
-exec
commence unchmod
processus pour chaque fichier. Lexargs
approche permet d'éviter cela, et est supérieure à la condition que vous avez une version defind
etxargs
qui peut faire face à la "les espaces dans les chemins d'accès" problème; voir la accepté de répondre.Et pour l'enregistrement, à l'aide de l'arrière-tiques va briser si il y a trop de fichiers à chmodé, ou de l'ensemble de la longueur des chemins d'accès est trop grand.
+
?man find
.;
et+;
. La barre oblique inverse est shell s'échapper.Mon succincte de deux cents...
Linux:
OSX:
Cela fonctionne à changer de manière récursive tous les fichiers contenus dans le répertoire courant et tous ses sous-répertoires. Si vous souhaitez cibler un répertoire différent, remplacez
.
avec le chemin d'accès correct:via http://www.linuxquestions.org/questions/aix-43/chmod-recursion-files-only-208798/?s=a70210fb5e5d0aa7d3c69d8e8e64e3ed
avec GNU trouver
find /path -type f -exec chmod 644 {} +;