Quelqu'un a-t-il un outil ou un script qui corrige récursivement les autorisations de fichier sur un répertoire?
Sur une machine Ubuntu Linux, un tas de fichiers ont été copiés sur un disque USB avec des autorisations 777 complètes (utilisateur, groupe, autre - lecture, écriture, exécution) par erreur. Je veux les remettre dans le répertoire de l'utilisateur corrigé.
Les répertoires doivent être 775 et tous les autres fichiers peuvent être 664. Tous les fichiers sont des images, des documents ou des MP3, donc aucun d'entre eux n'a besoin d'être exécutable. Si le bit de répertoire est défini, il doit être exécuté, sinon il suffit de l'utilisateur et du groupe, en lecture et en écriture.
J'ai pensé qu'il valait la peine de vérifier si un tel utilitaire existe avant de pirater un script shell :)
la source
Réponses:
Cela devrait faire l'affaire:
la source
find peut faire l'affaire tout seul avec -exec:
pour empêcher find de générer un chmod pour chaque entrée:
(cela appelle effectivement chmod une fois avec la liste de tous les fichiers en tant que paramètres plutôt qu'un chmod par fichier)
la source
Cette réponse ne résoudra pas votre problème, mais quelqu'un pourrait la trouver utile pour un problème similaire où les fichiers ont moins d'autorisations qu'ils ne devraient.
La magie est l'autorisation X, plutôt que x. La page de manuel chmod le décrit ainsi:
Cela ne convient pas dans votre cas, car vos fichiers ont une autorisation d'exécution, correspondra donc au deuxième test.
la source
J'ai fait un script à partir de la solution de freiheit, il ajoute une vérification de base des arguments.
la source
chmod: missing operand after ‘0644’
. Puis-je suggérer d'encapsuler les instructions find avec une vérification pour voir si la cible existe?if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
Dans le cas où vous utilisez ssh, c'est une bonne idée de ne pas modifier les
~/.ssh
autorisations.la source
J'ai fait un script bash très simple l'autre jour parce que je devais corriger les autorisations. Pourquoi n'y a-t-il pas un utilitaire formel pour réinitialiser les autorisations de base, non root, de fichiers et de dossiers?
Le script utilise 755 pour trouver tous les dossiers et 644 bibliothèques. Il teste ensuite chaque fichier avec readelf pour voir s'il a un en-tête elf binaire. Sinon, il recherche les shebang dans les deux premiers caractères
#!
. Il 755 ces instances et 644 tout le reste après avoir vérifié si le fichier a déjà l'autorisation correspondante.Les cas spéciaux sont traités avec une exception comme le
*.bak
pour les fichiers à ignorer.la source
J'ai trouvé une solution C-shell simplifiée. Cela peut ne pas être complètement infaillible mais devrait fonctionner pour la plupart des répertoires. Il suppose que la commande "file" d'Unix fonctionne et trouve les fichiers exec pour les réinitialiser aux autorisations exec:
la source
Une alternative, qui ne répond pas exactement à la demande d'origine, mais qui correspond plus vraisemblablement à l'intention de l'OP, consiste à spécifier symboliquement les autorisations. Par exemple, je suppose que OP souhaite "supprimer l'accès en écriture pour le public et supprimer l'autorisation exécutable de tous les fichiers".
Cela est possible si vous utilisez la représentation d'autorisation symbolique.
En l'écrivant de cette façon au lieu de définir explicitement «0664», vous évitez d'autoriser accidentellement des autorisations supplémentaires aux fichiers qui ont été précédemment verrouillés. Par exemple, si un fichier était 0770, il ne deviendra pas 0664 par erreur.
Pour faire la première exigence, vous pouvez simplement utiliser
chmod
:Pour effectuer la deuxième exigence:
Ou pour faire les deux:
la source