web-dev-qa-db-de.com

Ändern der Berechtigungen für Dateien und Ordner mithilfe des Shell-Befehls auf dem Mac

Unter Linux können wir den folgenden Befehl verwenden, um den Berechtigungsmodus der Dateien und Ordner rekursiv zu ändern.

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

wie könnte ich das gleiche für Mac tun, wie ich den folgenden Fehler wiederholt erhalte.

find: TEST_FILE: Keine solche Datei oder Verzeichnis

27
pytho

Das Problem ist, dass der * Von Ihrer Shell interpretiert und zu einer Datei mit dem Namen TEST_FILE Erweitert wird, die sich zufällig in Ihrem aktuellen Arbeitsverzeichnis befindet. Sie sagen also find um den Befehl mit dem Namen TEST_FILE auszuführen, der nicht existiert. Ich bin mir nicht sicher, was Sie damit erreichen wollen *, Sie sollten es einfach entfernen.

Außerdem sollten Sie das Idiom -exec program '{}' \+ Anstelle von -exec program '{}' \; Verwenden, damit find nicht für jede Datei einen neuen Prozess auslöst. Mit ; Wird für jede Datei ein neuer Prozess verzweigt, während mit + Nur ein Prozess verzweigt und alle Dateien auf einer einzigen Befehlszeile übergeben werden, was für einfache Programme wie chmod ist viel effizienter.

Schließlich kann chmod mit dem Flag -R Rekursive Änderungen selbst vornehmen. Gehen Sie also wie folgt vor, es sei denn, Sie müssen nach bestimmten Dateien suchen:

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

Sie können einfach das Flag -R (rekursiv) verwenden.

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

Mit CHMOD yes:

Für rekursive Datei:

chmod -R 777 foldername or pathname

Für nicht rekursive:

chmod 777 foldername or pathname
10
Einlanzer

Ich habe keinen Mac OSx-Rechner, auf dem ich das testen kann, aber in Bash unter Linux verwende ich so etwas wie das Folgende, um nur Verzeichnisse zu chmodieren:

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

aber das macht auch das selbe:

chmod 755 `find . -type d`

und das auch:

chmod 755 $(find . -type d)

Die letzten beiden verwenden unterschiedliche Formen von Unterbefehlen. Der erste verwendet Backticks (ältere und veraltete) und der andere die Unterbefehlssyntax $ ().

Also denke ich in deinem Fall, dass das Folgende tun wird, was du willst.

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