web-dev-qa-db-fra.com

modification récursive des autorisations pour les fichiers et les dossiers à l'aide de la commande Shell dans mac

Sous Linux, nous pouvons utiliser la commande suivante pour modifier le mode d'autorisation des fichiers et des dossiers de manière récursive.

trouver "/ Users/Test/Desktop/PATH" -exec * chmod 777 {} \;

comment pourrais-je faire la même chose pour mac car j'obtiens l'erreur suivante de manière répétitive.

find: TEST_FILE: Aucun fichier ou répertoire de ce type

27
pytho

Le problème est que le * est interprété par votre shell et se développe dans un fichier nommé TEST_FILE qui se trouve dans votre répertoire de travail actuel, vous dites donc à find d'exécuter la commande nommée TEST_FILE qui n'existe pas. Je ne suis pas sûr de ce que vous essayez d'accomplir avec ce *, vous devez simplement le supprimer.

De plus, vous devez utiliser l'idiome -exec program '{}' \+ au lieu de -exec program '{}' \; pour que find ne crée pas de nouveau processus pour chaque fichier. Avec ;, un nouveau processus est forké pour chaque fichier, alors qu'avec +, il ne bifurque qu'un seul processus et passe tous les fichiers sur une seule ligne de commande, ce qui pour des programmes simples comme chmod est beaucoup plus efficace.

Enfin, chmod peut effectuer des modifications récursives par lui-même avec le -R flag, donc à moins que vous n'ayez besoin de rechercher des fichiers spécifiques, procédez comme suit:

chmod -R 777 /Users/Test/Desktop/PATH
41
Adam Rosenfield

Vous pouvez simplement utiliser l'indicateur -R (récursif).

chmod -R 777 /Users/Test/Desktop/PATH
31
Andrew Vit

En utilisant CHMOD oui:

Pour le fichier récursif:

chmod -R 777 foldername or pathname

Pour non récursif:

chmod 777 foldername or pathname
10
Einlanzer

Je n'ai pas de machine Mac OSx pour tester cela mais en bash sous Linux j'utilise quelque chose comme ceci pour chmod uniquement les répertoires:

find . -type d -exec chmod 755 {} \+

mais cela fait aussi la même chose:

chmod 755 `find . -type d`

et cela aussi:

chmod 755 $(find . -type d)

Les deux derniers utilisent différentes formes de sous-commandes. Le premier utilise des backticks (plus anciens et amortis) et l'autre la syntaxe de la sous-commande $ ().

Je pense donc que dans votre cas, ce qui suit fera ce que vous voulez.

chmod 777 $(find "/Users/Test/Desktop/PATH")
5
frederickjh