On Son, 22 Sep 2002 at 19:03 (+0200), Markus Kolb wrote:
Jan Trippler wrote: [...]
Die man-Page ist schon richtig. Du kannst einen chmod -R nur für ein Verzeichnis starten, Rekursion für eine Datei macht ja wenig Sinn, oder? Es ist aber so, dass chmod -R sehr wohl _unterhalb_ des Startverzeichnisses Dateien _und_ Verzeichnisse anpackt. Dein Denkfehler war, dass chmod die Wildcard *.html selbst auflöst (also rekursiv auf alle gefundenen Dateien + Verzeichnisse anwendet).
Wieso ist die manpage richtig? Für FILE kann man im Zusammenhang mit -R nur ein Verzeichnis angeben. Es werden nur alle Dateien geändert, wenn man für FILE ein Verzeichnis angibt.
Oh Mann :-( Wie bitte schön soll denn eine Datei _rekursiv_ behandelt werden? Wenn Du chmod für eine Datei aufrufst, wird die Datei geändert - Punkt.
Kurz: chmod -R FILE ist blödsinn und in die manpage gehört zusätzlich rein: chmod -R [OPTION] ... MODE ... DIR Das war übrigens kein Denkfehler, sondern ich habe chmod durch die manpage einfach zu viel zugetraut.
Nein, Du hast es einfach immer noch nicht kapiert! Du hast immer noch nicht kapiert, dass chmod keine Wildcards auflöst. Er kriegt Dateinamen übergeben. Wenn Du als Muster *.html angibst und es existiert im aktuellen Verzeichnis eine _Datei_ irgendwas.html und ein _Verzeichnis_ nochwas.html, dann wird chmod durch die Shell so aufgerufen: chmod -R irgendwas.html nochwas.html Also ändert chmod brav den Mode von irgendwas.html auf 644 (_nicht_ rekursiv, das geht ja bei einer Datei nicht) und _rekursiv für nochwas.html und alle darunter liegenden Dateien + Verzeichnisse! Nochmal: chmod löst keine Wildcards auf (das machen nur sehr wenige Befehle, wie find), das macht die Shell!
Das Problem war auch nicht die Wildcard, sondern dass chmod eben nicht bestimmte Dateien und Verzeichnisse in der Rekursion ändert, sondern nur alle. Also eine rekursive Änderung aller Rechte macht.
Ja, das ist richtig - und so stehts in der Manpage.
Es müsste also heissen: change _all_ files and directories recursively Wenn das nicht falsch bzw. lasch dokumentiert wäre, dann hätte ich gar nicht angenommen, dass chmod soetwas kann, wie ich es brauchte und hätte gleich einen anderen Weg versucht.
Da ist nix falsch oder lasch formuliert. Wenn Du weisst, wie unter Unix die Dateinamenersetzung funktioniert, dann ist da auch nix missverständlich dran. Wie soll denn ein Befehl wie chmod wissen, _welche_ Dateien unterhalb Deiner Kommandozeilenargumente Du geändert haben willst - dafür hat er nämlich keine Option (wie z. B. der find mit -regex), und die Kommandozeilenargumente werden, wie Dir schon mehrfach mitgeteilt wurde, bereits vorher durch die Shell geparst. Jan