J'ai une archive, qui est archivée par quelqu'un d'autre, et je souhaite automatiquement, après l'avoir téléchargée, modifier une branche du système de fichiers dans les fichiers extraits pour accéder en lecture. (Je ne peux pas changer la façon dont l'archive est créée).
J'ai examiné ce fil: chmod: comment ajouter récursivement des autorisations d'exécution uniquement aux fichiers qui ont déjà une autorisation d'exécution comme dans d'autres, mais pas de joie.
Les répertoires sont à l'origine livrés avec plusieurs mais tous les mauvais drapeaux, ils peuvent apparaître comme:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Ce ne sont que quelques-uns que j'ai découvert jusqu'à présent, mais cela pourrait être plus.
find
des erreurs lors d'une tentative de recherche dans un répertoire sans x
autorisation et ne le transmet donc pas chmod
. Ce que j'ai fait jusqu'à présent, c'est modifier manuellement les autorisations sur le répertoire parent, puis aller dans les répertoires enfants et faire la même chose pour eux et ainsi de suite. Mais c'est beaucoup de travail manuel. N'y a-t-il pas un moyen de le faire automatiquement?
C'est-à-dire comment je le fais maintenant:
faire:
$ chmod -R +x
$ chmod -R +r
jusqu'à ce que je ne reçoive aucune erreur,
$ find -type f -exec chmod -x {} +
Mais il doit y avoir un meilleur moyen.
Réponses:
Vous avez besoin d'un accès en lecture, en plus d'exécuter l'accès, pour répertorier un répertoire. Si vous disposez uniquement d'un accès d'exécution, vous pouvez trouver les noms des entrées dans le répertoire, mais pas d'autres informations (pas même les types, vous ne savez donc pas lesquelles des entrées sont des sous-répertoires). Cela fonctionne pour moi:
la source
+
la ligne de commande d'une manière différente. Je n'en étais pas vraiment conscient;\;
est la manière habituelle, avec une commande par fichier qui correspond à la recherche."{}"
au lieu de{}
devrait le réparer.Vous pouvez utiliser chmod avec la
X
lettre de mode (le X majuscule) pour définir l'indicateur exécutable uniquement pour les répertoires.Dans l'exemple ci-dessous, l'indicateur exécutable est effacé puis défini de manière récursive pour tous les répertoires:
Un peu d'explication:
chmod -x foo
- désactivez le drapeau eXecutable pourfoo
chmod +x foo
- définir le drapeau eXecutable pourfoo
chmod go+x foo
- identique à ci-dessus, mais définissez le drapeau uniquement pour les utilisateurs de groupe et autres , ne touchez pas la permission de l' utilisateur (propriétaire)chmod go+X foo
- comme ci-dessus, mais ne s'applique qu'aux répertoires, ne touchez pas aux fichierschmod -R go+X foo
- comme ci-dessus, mais procédez de manière récursive pour tous les sous-répertoires defoo
la source
Essayez de changer toutes les persmissions en même temps:
la source
find -type f -exec chmod -x {} +
après.Pour que tout soit accessible en écriture par le propriétaire, lu / exécuté par le groupe et exécutable mondial:
Pour que tout soit grand ouvert:
la source
chmod -R 0777 .
Ajouter des autorisations exécutables, récursivement , à tous les fichiers (pas les dossiers) dans le dossier actuel avec l'
sh
extension:find . -name '*.sh' -type f | xargs chmod +x
* Remarquez le tuyau (
|
)la source
Donnez 0777 à tous les fichiers et répertoires à partir du chemin actuel:
la source