Dateirechte mit find und xargs ersetzen
Ich habe in einem Bash-Script eine ganze Menge an Befehlen dieser Art. Das funktioniert, solange die Dateinamen keine Leerzeichen enthalten und das ist bis auf ein paar Ausnahmen immer der Fall. David hat ja im Thread "basename(?) und Variable in Dateinamen einfügen" vom 27 Sep 2009 19:05:27 bereits auf die Problematik hingewiesen. Gibt es dafür (Leerzeichen im Dateinamen) eine Lösung in _1_ Zeile? find "$PFAD" -type d -print0 | xargs -r -0 chmod 775 find "$PFAD" -type f -print0 | xargs -r -0 chmod 664 Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Al! On Do, 15 Okt 2009, Al Bogner wrote:
Dateinamen) eine Lösung in _1_ Zeile?
find "$PFAD" -type d -print0 | xargs -r -0 chmod 775 find "$PFAD" -type f -print0 | xargs -r -0 chmod 664
ungetested: ~$ find "$PFAD" -exec chmod a+rwX,o-w {} + Mit freundlichen Grüßen Christian -- :wq -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Thu, 15 Oct 2009, 14:23:22 +0200, Al Bogner wrote:
Ich habe in einem Bash-Script eine ganze Menge an Befehlen dieser Art. Das funktioniert, solange die Dateinamen keine Leerzeichen enthalten und das ist bis auf ein paar Ausnahmen immer der Fall. David hat ja im Thread "basename(?) und Variable in Dateinamen einfügen" vom 27 Sep 2009 19:05:27 bereits auf die Problematik hingewiesen. Gibt es dafür (Leerzeichen im Dateinamen) eine Lösung in _1_ Zeile?
find "$PFAD" -type d -print0 | xargs -r -0 chmod 775 find "$PFAD" -type f -print0 | xargs -r -0 chmod 664
aeh, vielleicht stehe ich ja auf dem Schlauch, aber du hast da doch schon selber die Loesung beschrieben! Mit dem "-print0" erreichst du doch gerade, dass der Delimiter zwischen gefundenen Argumenten das '\0' Byte ist (und nicht irgendwelcher Whitespace wie das Leerzeichen oder eine neue Zeile), das wiederum xargs mit dem "-0" Switch entsprechend wieder an die aufzurufenden Programme als *ein* Argument uebergeben kann. Funktioniert hier jedenfalls voellig problemlos: $ mkdir "a b" $ touch "a b/1 2" $ find "." -type d -print0 | xargs -r -0 ls -ld drwxrwxrwt 3 manfred users 16 Oct 15 19:41 . drwxr-xr-x 2 manfred users 16 Oct 15 19:42 ./a b $ find "." -type f -print0 | xargs -r -0 ls -ld -rw-r--r-- 1 manfred users 0 Oct 15 19:42 ./a b/1 2 Wo ist das Problem?
Al
Cheers. l8er manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Donnerstag 15 Oktober 2009 19:45:13 schrieb Manfred Hollstein:
On Thu, 15 Oct 2009, 14:23:22 +0200, Al Bogner wrote:
Ich habe in einem Bash-Script eine ganze Menge an Befehlen dieser Art. Das funktioniert, solange die Dateinamen keine Leerzeichen enthalten und das ist bis auf ein paar Ausnahmen immer der Fall. David hat ja im Thread "basename(?) und Variable in Dateinamen einfügen" vom 27 Sep 2009 19:05:27 bereits auf die Problematik hingewiesen. Gibt es dafür (Leerzeichen im Dateinamen) eine Lösung in _1_ Zeile?
find "$PFAD" -type d -print0 | xargs -r -0 chmod 775 find "$PFAD" -type f -print0 | xargs -r -0 chmod 664
aeh, vielleicht stehe ich ja auf dem Schlauch, aber du hast da doch schon selber die Loesung beschrieben! Mit dem "-print0" erreichst du doch gerade, dass der Delimiter zwischen gefundenen Argumenten das '\0' Byte ist (und nicht irgendwelcher Whitespace wie das Leerzeichen oder eine neue Zeile), das wiederum xargs mit dem "-0" Switch entsprechend wieder an die aufzurufenden Programme als *ein* Argument uebergeben kann. Funktioniert hier jedenfalls voellig problemlos:
$ mkdir "a b" $ touch "a b/1 2" $ find "." -type d -print0 | xargs -r -0 ls -ld drwxrwxrwt 3 manfred users 16 Oct 15 19:41 . drwxr-xr-x 2 manfred users 16 Oct 15 19:42 ./a b $ find "." -type f -print0 | xargs -r -0 ls -ld -rw-r--r-- 1 manfred users 0 Oct 15 19:42 ./a b/1 2
Wo ist das Problem?
Gute Frage, ich bekomme jetzt keine Fehlermeldungen mehr. D<s Skript ist uralt, d.h ich habe nichts geändert. Keine Ahnung, warum es letztlich bei einem bestimmten Dir mindestens 2x Fehlermeldungen gab. Ich hatte es aus Zeitmangel eine Weile ignoriert, weil die Rechte dieses Dirs ziemlich nebensächlich sind. Ich dachte damals, dass das der Fall ist, den David beschrieben hat. Leerzeichen in Dateinamen sind hier große Ausnahme und betreffen nur unwichtige Dateien, die aus externen Gründen Leerzeichen haben müssen. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Al Bogner
-
Christian Brabandt
-
Manfred Hollstein