Shell-Skript zum rekursiven Durchlaufen eines Verzeichnisses und zum Ändern der Dateitypen basierend auf den Bedingungen des Dateityps

Shell-Skript zum rekursiven Durchlaufen eines Verzeichnisses und zum Ändern der Dateitypen basierend auf den Bedingungen des Dateityps

Kann mir jemand Code oder ein Tutorial zum Schreiben eines Shell-Skripts zeigen, das rekursiv eine gesamte Verzeichnisstruktur durchlaufen kann (beginnend beim aktuellen Arbeitsverzeichnis oder mit einem erforderlichen Argument, wo begonnen werden soll) und Folgendes kann:

  1. Bestimmen Sie, ob es sich bei einem Element um ein Verzeichnis handelt und wenn ja, chmod 755ob es sich um ein Verzeichnis handelt oder ...
  2. Bestimmen Sie, ob es sich bei einem Element um eine Datei (kein Verzeichnis) handelt, und chmod 644führen Sie die Überprüfung durch.

Ich suche nach Kompatibilität mit Ubuntu, Debian, RHEL-Based usw., daher markiere ich dies nicht mit einer bestimmten Sprache. Ich hätte dies gerne in Bash, aber wenn Sie ein ZSH-Skript haben, funktioniert das auch.

Antwort1

Ich bin an diesen einzeiligen Befehl gewöhnt (rekursiv, beginnend im aktuellen Arbeitsverzeichnis)

find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +

Erläuterung:

find .                    # starting in curdir find   
-type d                   # any directory
-exec chmod 0755 '{}'     # and chmod it to 755
+                         # (variant of -exec look find man page)
-or                       # or
-type f                   # any file
-exec chmod 0644 '{}'     # and chmod it to 644
+                         # (as above)

Antwort2

Die einfache Antwort:

chmod -R a+rX .

+X(beachten Sie das große X) bedeutet, die Ausführungsberechtigung zu erteilen, wenn die Ausführungsberechtigung für einen Benutzer bereits vorhanden war. Wenn Sie einen Verzeichnisbaum haben, der die richtigen Berechtigungen für den Eigentümer hat, und Sie ihn für alle zugänglich machen möchten, ist dies der richtige Befehl. Er macht nicht nur Verzeichnisse allgemein ausführbar, sondern auch ausführbare Dateien.

Wenn Sie außerdem die Schreibberechtigungen auf den Besitzer zurücksetzen und alle Setuid/Setgid-Bits löschen möchten, stellen Sie Folgendes ein:

chmod -R a-ws,u+w,a+rX .

Der obligatorische zsh-Zweizeiler, wenn man keine Datei ausführbar machen will:

chmod 755 **/*(/)
chmod 644 **/*(.)

verwandte Informationen