Skript zum Ändern von Zugriffsrechten auf Ordner aber nicht Dateien

M

m0ench

Jungspund
Hallo zusammen,

bin noch ziemlich am Anfang der Shell-Skripte.

Ist es möglich ein Skript zu schreiben das die Zugriffsrechte eines Verzeichnisses mitsamt sämtlicher Unterordner, aber nicht die Dataien darin, ändert?

Hab mir das ungefähr so vorgestellt:

!#/bin/bash
chmod o+x-rw /ordner
chmod o+x-rw /ordner/app
chmod o+x-rw /ordner/app/application
chmod o+x-rw /ordner/app/application/product
chmod o+x-rw /ordner/app/application/product/10.2.0

Ich hab keine Lust mich durch ein gesamtes Netz an Verzeichnissen zu wühlen und alles einzeln zu ändern. Ich könnte ja "recursiv" mit dem ersten Ordner anfangen, aber das ändert ja auch die Dateien mit.

So muss ich nur die Ordner in ein Skript fügen und den Befehl nicht immer wieder neu schreiben.

Bin für jede Hilfe dankbar

Ps.:
Warum ich eigentlich frage. Wenn ich das so ausführe bekomme ich:
chmod: cannot access `/ordner/app/application/product/10.2.0': No such file or directory
chmod: cannot access `/ordner/app/application/product': No such file or directory
chmod: cannot access `/ordner/app/application': No such file or directory
chmod: cannot access `/ordner/app': No such file or directory
 
Zuletzt bearbeitet:
Danke erstmal. Find ist mir an dem Punkt zu aufwendig.
Kann ich denn die Pfade einer Umgebungsvariablen auslesen und dann die Rechte ändern?
 
Ungetester Schnellschuß:

Code:
find dein_verzeichnis -type d -exec chmod o+x-rw {};

Das sollte die Zugriffsberechtigungen aller Ordner in "dein_verzeichnis" ändern, nicht aber die der darin enthaltenen Dateien.
 
Code:
find $ORDNER -type d | xargs chmod u+x-rw
 
Supersuckers Lösung dürfte die performantere sein, da kein weiterer Descriptor für xargs geöffnet werden muss und Output nicht erst durch eine Pipe (d.h. die Shell) gereicht werden muss.
 
Zuletzt bearbeitet:
Bei Supersucker's Lösung steht hier aber was zu:

Es kann dabei zu Problemen mit Datei/Verzeichnisnamen kommen, die Leerzeichen, Anführungszeichen oder Backslashes enthalten.

Daher ist folgender Aufruf zu empfehlen (Infos siehe "man xargs" und "man find")

find . -type f -print0 | xargs -0 chmod 644

Ich benutzt meist das mit xargs.. warum? Weil ich das verstehe und das andere nicht ;O
 

Ähnliche Themen

HandbrakeCLI Shell Skript

grub-pc Probleme bei upgrade

Shell Skript zum automatischen Aufräumen von doppelten Ordnern

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Zurück
Oben