Hat jemand ein Tool oder Skript, das die Dateiberechtigungen für ein Verzeichnis rekursiv korrigiert?
Auf einem Ubuntu Linux-Computer wurden eine Reihe von Dateien mit vollen 777-Berechtigungen (Benutzer, Gruppe, Sonstiges - Lesen, Schreiben, Ausführen) fehlerhaft auf ein USB-Laufwerk kopiert. Ich möchte sie wieder in das korrigierte Benutzerverzeichnis stellen.
Die Verzeichnisse sollten 775 sein und alle anderen Dateien können 664 sein. Alle Dateien sind Bilder, Dokumente oder MP3s, daher muss keine von ihnen ausführbar sein. Wenn das Verzeichnisbit gesetzt ist, muss es ausgeführt werden, andernfalls nur Benutzer und Gruppe, Lesen und Schreiben.
Ich dachte, es lohnt sich zu prüfen, ob ein solches Dienstprogramm existiert, bevor ich ein Shell-Skript zusammenstelle :)
quelle
Antworten:
Dies sollte den Trick machen:
quelle
find schafft es alleine mit -exec:
um zu verhindern, dass find für jeden Eintrag einen chmod erzeugt:
(dies ruft chmod effektiv einmal mit der Liste aller Dateien als Parameter auf und nicht mit einem chmod pro Datei)
quelle
Diese Antwort wird Ihr Problem nicht lösen, aber jemand könnte es für ein ähnliches Problem nützlich finden, bei dem Dateien weniger Berechtigungen haben als er sollte.
Die Magie ist die X-Erlaubnis und nicht x. Die chmod-Manpage beschreibt es so:
Dies ist in Ihrem Fall nicht geeignet, da Ihre Dateien über die Ausführungsberechtigung verfügen und daher dem zweiten Test entsprechen.
quelle
Ich habe aus der Lösung von freiheit ein Skript erstellt, das eine grundlegende Argumentprüfung hinzufügt.
quelle
chmod: missing operand after ‘0644’
. Kann ich vorschlagen, die find-Anweisungen mit einer Prüfung zu versehen, um festzustellen, ob das Ziel vorhanden ist?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
Wenn Sie ssh verwenden, sollten Sie die
~/.ssh
Berechtigungen nicht ändern .quelle
Ich habe neulich ein wirklich einfaches Bash-Skript geschrieben, weil ich Berechtigungen korrigieren musste. Warum gibt es kein offizielles Dienstprogramm zum Zurücksetzen von Basis-, Nicht-Root-, Datei- und Ordnerberechtigungen?
Das Skript verwendet find to 755 alle Ordner und 644 Bibliotheken. Anschließend wird jede Datei mit readelf getestet, um festzustellen, ob sie einen binären Elf-Header enthält. Wenn nicht, werden die ersten beiden Zeichen nach Shebang durchsucht
#!
. Es 755 diese Instanzen und 644 alles andere, nachdem es überprüft, ob die Datei bereits die passende Berechtigung hat.Sonderfälle werden mit einer Ausnahme wie die
*.bak
für Dateien behandelt, die ignoriert werden sollen.quelle
Ich habe eine vereinfachte C-Shell-Lösung gefunden. Dies ist möglicherweise nicht völlig idiotensicher, sollte aber für die meisten Verzeichnisse funktionieren. Es wird davon ausgegangen, dass der Unix-Befehl 'file' funktioniert, und es werden Exec-Dateien gefunden, um sie auf die Exec-Berechtigungen zurückzusetzen:
quelle
Eine Alternative, die die ursprüngliche Anfrage nicht genau beantwortet, aber mit größerer Wahrscheinlichkeit vom OP beabsichtigt wird, besteht darin, die Berechtigungen symbolisch anzugeben. Ich gehe zB davon aus, dass OP "den Schreibzugriff für die Öffentlichkeit und die ausführbare Berechtigung für alle Dateien entfernen" möchte.
Dies ist möglich, wenn Sie die symbolische Berechtigungsdarstellung verwenden.
Wenn Sie es so ausschreiben, anstatt "0664" explizit festzulegen, vermeiden Sie, dass Sie versehentlich zusätzliche Berechtigungen für Dateien gewähren, die zuvor gesperrt waren. Wenn eine Datei beispielsweise 0770 war, wird sie nicht versehentlich zu 0664.
Um die erste Anforderung zu erfüllen, können Sie einfach Folgendes verwenden
chmod
:So führen Sie die zweite Anforderung aus:
Oder beides machen:
quelle