Comment changer le propriétaire d'un répertoire

14

EDIT : Le problème était qu'Apple utilise des autorisations pour marquer les sauvegardes et vous empêche de les modifier (probablement une fonction de sécurité). En utilisant, chmod -RN <dir>j'ai supprimé les données ACL de tous les dossiers contenant des données importantes et cela m'a permis de devenir moi-même le propriétaire et d'appliquer les autorisations appropriées.

Question d'origine
J'ai une sauvegarde extrêmement volumineuse (> 700 Go) qui a maintenant les mauvaises autorisations (mon UID a changé lors d'une installation propre, longue histoire) et je dois les changer. L'option qui prend du temps consiste à parcourir manuellement chaque dossier et à modifier les autorisations, mais cela prendra du temps.

Je veux utiliser chownpour me faire propriétaire de toutes mes données importantes, puis utiliser chmod 700sur tous ces dossiers pour ne donner des rwxautorisations qu'à moi.

La solution idéale est une méthode d'utilisation findpour rechercher récursivement des dossiers correspondant à une expression régulière (la mienne actuelle .*/[DCV].*|Pictures|M[ou].*), puis faire de mon UID le propriétaire et définir les autorisations sur 700.

Le point important que je ne peux pas saisir:
Cependant, lorsque j'essaie de courir, chown Me DirectoryNameje reçois chown: DirectoryName: Operation not permitted.

Tout ce que je trouve est lié à la modification des autorisations d'un fichier et non d'un répertoire. Peut-être que je regarde ça dans le mauvais sens?
Quelque chose me dit qu'il n'y a aucun moyen de donner mon UID rwxet ---à tout le monde.

Comment puis-je atteindre cet objectif? J'utilise Mac OS X 10.10.3.

Je sais qu'il s'agit d'un forum UNIX / Linux (et j'utilise Mac) mais cette question concerne beaucoup plus l'utilisation du shell, chown , chmodet les autorisations et les solutions affichées ici sera applicable à tout système d' exploitation UNIX. Il serait préférable que les solutions publiées fassent réapparaître mes anciennes sauvegardes dans Time Machine.

Merci à tous ceux qui ont répondu rapidement, mais chownne semblent tout simplement pas fonctionner sur les répertoires pour une raison quelconque. Le fait qu'il s'agisse d'une .sparsebundleimage disque sur un lecteur réseau est-il pertinent? J'ai supposé que ce serait la même chose que sur n'importe quel lecteur externe.

Arc676
la source
Quel type de lecteur réseau? S'il s'agit de NFS, il y a de fortes chances qu'il soit exporté avec root_squashactivé, vous ne pourrez donc pas effectuer d'opérations uniquement sur la racine, comme à chownpartir du client.
Toby Speight
C'est un disque dur à l'intérieur d'une capsule Apple Time. Il s'agit essentiellement d'un disque protégé par mot de passe à l'intérieur d'une station de base WiFi. La seule différence est que le disque dur est connecté à votre ordinateur via Ethernet. Il y a en fait un port USB mais je ne l'ai jamais utilisé.
Arc676
Sinon, la norme find . -user $other_uid -print0 | sudo xargs chown $USERdevrait fonctionner.
Toby Speight
Quel système de fichiers réseau? df -hT <dirname>devrait vous dire.
Toby Speight
@TobySpeight nedf -hT <dir> donne aucune sortie pour a) le répertoire racine du disque dur réseau b) l'image disque à l'intérieur du disque dur réseau c) n'importe quel dossier sur le disque dur réseau. Peut-être que le comportement que vous vouliez est implémenté différemment sur Mac et Linux?
Arc676

Réponses:

23

J'ai peut-être mal compris. Mais vous pouvez utiliser récursivement chmod et chown par exemple.

chown -R username:username /path/directory

Pour appliquer récursivement l'autorisation 700, vous pouvez utiliser:

chmod -r 700 /path/directory

Bien sûr, ce qui précède est pour Linux, donc vous ne savez pas si mac osx est le même.

EDIT: Oui, j'ai oublié de mentionner que vous devez être root pour montrer quelque chose, je pensais juste que vous le saviez ... ma mauvaise.

dakka
la source
1
Mac OS utilise la même syntaxe. Pour exécuter la commande en tant que root, la manière la plus simple sur un Mac est de la préfixer avec sudo, donc sudo chmod(on vous demandera un mot de passe avec accès Administrateur).
mjturner
2

essayez en tant que root

 find wherever -type d -name ... -exec chown Me {} \;

  • -type d appliquer au dir uniquement
  • -name ... votre regexp
  • -exec chown Me {} \; utilisez chown sur find dir.

vous devez être root pour chown.

Archemar
la source