Wenn ich einen USB-Stick (FAT) an meinen Mac oder Ubuntu-Computer anschließe, sind für alle Dateien die ausführbaren Bits gesetzt. Wie entferne ich nach dem Kopieren der Verzeichnisstruktur auf meine Festplatte die ausführbaren Bits rekursiv nur aus den Dateien und behalte diese in den Verzeichnissen?
73
Antworten:
Mit GNU
chmod
(unter Ubuntu) Einzelbefehlsvariante (beginnend im aktuellen Verzeichnis):Erläuterung:
-R
- rekursiv arbeiten-x
- ausführbare Flags für alle Benutzer entfernen+X
- Ausführbare Flags für alle Benutzer setzen, wenn es sich um ein Verzeichnis handeltIn diesem Fall gilt das Kapital
X
nur für Verzeichnisse, da alle ausführbaren Flags von gelöscht wurden-x
. Andernfalls+X
werden ausführbare Flags gesetzt, auch wenn das Flag ursprünglich für einen Benutzer, eine Gruppe oder andere Benutzer gesetzt wurde.Mit BSD
chmod
(das auf Mac OS X vorhanden ist) müssen Sie dies in zwei Befehlen separat ausführen:(Wenn Sie auch versteckte Dateien in das Hauptverzeichnis aufnehmen möchten, müssen Sie wahrscheinlich * in. (Point) ändern, dies ist jedoch nicht getestet.)
quelle
chmod -R a-x+X *
umask
nichtx
für alle die Erlaubnis erteilen. Verwenden Sie die Standardeinstellungumask
oder haben Sie sie geändert? Könnten Sie bitte die Ausgabe desumask
Befehls senden ? Neben Ihrer Lösung gibt es auch diese Möglichkeit:chmod -R a-x,+X *
Diex
Berechtigung wird entsprechend Ihrer festgelegtumask
. Ich werde die Antwort aktualisieren, aber ich möchte zuerst das Verhalten in BSD / Mac OS X überprüfen.find
Variante in der Antwort unten, weil sie einfache Werkzeuge kombiniert, die One Thing Well.
stattdessen,*
wenn dies auf alle Dateien angewendet werden sollWenn Sie zuerst den richtigen Pfad eingeben:
oder
Der Suchvorgang findet alle Dateien des Typs 'f' (was reguläre Datei bedeutet) im Pfad. und ruft dann chmod -x für jede Datei auf. Das {} ersetzt den Dateinamen und das \; Beendet den Befehl chmod.
quelle
find
unterstützt wird, verwenden Sie-exec ... \+
stattdessen-exec ... \;
- es werden wenigerfork
+exec
s benötigt. Wenn nicht, benutzefind ... -print0 | xargs -0 ...
.find . -type f -perm +111 -exec chmod -x {} \;
find
Unterstützung-print0
ich bin ziemlich sicher, wird es auch unterstützen-exec
Verwenden Sie unter Linux und Unix in einem Terminalfenster oder unter Mac OS X in Terminal.app Folgendes:
quelle
Der
chmod -x+X
Weg funktionierte für mich auch nicht auf Ubuntu, also schrieb ich dieses minimale Python-Skript:Wenn sich in Ihrem Dateisystem noch etwas Besonderes befindet, wie z. B. Sockets, sollten Sie den letzten chmod mit einem try / catch-Befehl umgeben.
quelle