J'ai fait une sauvegarde sur un disque NTFS, et bien, cette sauvegarde s'est avérée vraiment nécessaire. Cependant, le lecteur NTFS a gâché les autorisations. Je voudrais les restaurer à la normale sans réparation manuelle de chaque fichier.
Un problème est que soudainement tous mes fichiers texte obtenus exécutent des autorisations, ce qui est faux ofc. Alors j'ai essayé:
sudo chmod -R a-x folder\ with\ restored\ backup/
Mais c'est faux car cela supprime également la x
permission des répertoires, ce qui les rend illisibles.
Quelle est la commande correcte dans ce cas?
permissions
executable
recursive
Gaazkam
la source
la source
Réponses:
Les
-x
supprime les autorisations d' exécution pour tousLes
+X
ajouteront des autorisations d' exécution pour tous, mais seulement pour les répertoires.la source
chmod -R -x+x *
chmod -R -x * && chmod -R +X *
Ok, j'ai relu les pages de manuel "chmod" pour Mac OS X, BSD et Linux, et ai fait quelques expériences. Voici ce que j'ai appris sur les modes symboliques. Cela peut devenir compliqué, mais cela vaut la peine de comprendre:
Ainsi, par exemple,
a+x
rendrait un fichier exécutable par tout le monde.a+X
ferait un fichier exécutable par tout le monde SI il avait été exécutable par n'importe qui.a+x
rendrait un répertoire consultable par tout le monde.a+X
rendrait également un répertoire consultable par tout le monde.La principale différence entre BSD et Linux réside dans le fait qu’avec BSD, la détermination est effectuée en fonction des autorisations du fichier avant l’ exécution de chmod. Sous Linux, la détermination est faite immédiatement avant que la clause + X soit exécutée.
Ainsi, avec BSD, la combinaison
a-x,a+X
supprime les droits d’exécution / de recherche, puis permet à tout le monde de rechercher un répertoire, et rend un fichier exécutable par tout le monde s’il avait été à l’origine exécutable par qui que ce soit.Avec Linux,
a-x,a+X
supprimerait l’autorisation d’exécution / recherche, puis rendrait un répertoire accessible à tous, tout en laissant un fichier exécutable par personne.Voici un exemple concret: sur une machine BSD: un répertoire, un fichier exécutable et un fichier non exécutable:
Notez que le répertoire et "fie" sont tous deux exécutables / consultables par l'utilisateur, mais pas par les autres.
Maintenant nous exécutons
chmod a-x,a+X *
. La première clause supprime le bit execute / search de tous les utilisateurs pour tous les fichiers, mais la seconde clause le rajoute à la fois pour "fee" et "fie". "fee" parce que c'est un répertoire et "fie" parce qu'il avait au moins un bit exécutable pour commencer.J'ai eu le même résultat en exécutant
chmod -x+X
.Conclusion: la solution de Jak Gibb fonctionnera sous Linux, mais pour BSD, vous devrez effectuer deux passages.
Je n'ai pas testé cela sur SVr4 ou d'autres variantes d'Unix.
la source
Une façon de le faire:
la source
chmod a-x {}
chmod a-x {}
pourrait également finir par supprimer les autorisations que vous ne souhaitiez pas modifier et laisser des fichiers accessibles en écriture. Le fait est que 0644 est un compromis "généralement raisonnable". Bien entendu, le PO devrait également engager le cerveau avant d’appliquer des solutions d’Internet sur son ordinateur.chmod
. Si les fichiers de sauvegarde contiennent des scripts et des fichiers binaires, leur suppressionx
est incorrecte. Si les autorisations précédenteschmod
sont 0777, elleschmod a-x
resteront toujours 0666, ce qui n'est probablement pas ce que vous souhaitez. Ce que je dis, c’est quechmod 0644
c’est une meilleure méthode heuristique, mais cechmod a-x
n’est pas faux.Supprime l'autorisation d'exécuter des fichiers qui ne sont pas de type répertoire (comme vous l'avez demandé) ni lien symbolique (les liens symboliques sont généralement toujours rwxrwxrwx et
chmod
pourraient affecter la cible du lien symbolique sur eux).Notez que:
ne changerait que la permission des fichiers normaux . Cela exclurait les répertoires et les liens symboliques , mais également les périphériques , les canaux nommés , les sockets et éventuellement d’autres selon le système (bien que dans le cas d’une sauvegarde d’un système de fichiers NTFS, il est peu probable que ceux-ci soient présents).
la source
Dans zsh, utilisez le qualificatif glob
.
pour ne faire correspondre que les fichiers normaux (sans inclure les liens symboliques), etD
pour faire correspondre les fichiers point:Si la ligne de commande est trop longue, vous pouvez utiliser
zargs
:la source