chown/chmod ändert keine 6114 files auf einen Schlag
Hallo miteinander, Ich habe gerade versucht die Rechte meiner lokalen - mit diff's aufgefrischten - Supportdatenbank anzupassen. Dabei ist mir dieses passiert: bash-2.04# chown root:root ./* bash: /bin/chown: Die Argumentliste ist zu lang bash-2.04# ls -l | wc -l 6114 bash-2.04# ls -l | grep .html | wc -l 3870 bash-2.04# ls -l | grep .txt | wc -l 2244 bash-2.04# chown root:root ./*.html bash-2.04# chown root:root ./*.txt bash-2.04# chmod 644 ./* bash: /bin/chmod: Die Argumentliste ist zu lang bash-2.04# Weil ich dann jeden Dateityp einzeln geändert habe, hat es funktioniert. Weiß jemand, wieviele Argumente an chmod und chown übergeben werden können? Kann man das irgendwo anpassen? Dabei handelt es sich vielleicht um den Substitutionsmechanismus der Bash? In den man-pages oder info gab es dazu keine Angaben. Gruß Andreas Rathgeber _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com
Hi, * On Saturday, February 17, 2001 at 00:47, Andreas Rathgeber wrote:
Ich habe gerade versucht die Rechte meiner lokalen - mit diff's aufgefrischten - Supportdatenbank anzupassen. Dabei ist mir dieses passiert:
bash-2.04# chown root:root ./* bash: /bin/chown: Die Argumentliste ist zu lang [...]
Weil ich dann jeden Dateityp einzeln geändert habe, hat es funktioniert. Weiß jemand, wieviele Argumente an chmod und chown übergeben werden können? Kann man das irgendwo anpassen? Dabei handelt es sich vielleicht um den Substitutionsmechanismus der Bash?
Wieviel weiß ich nicht, aber einen schnellen Workaround: inkl. Unterverzeichnissen: find -exec chown root.root \{\} \; nur Files: find -type f -exec chown root.root \{\} \; nur Files im akt. Verzeichniss: find -mindepth 1 -maxdepth 1 -exec chown root.root \{\} \; Adalbert
* Andreas Rathgeber:
Ich habe gerade versucht die Rechte meiner lokalen - mit diff's aufgefrischten - Supportdatenbank anzupassen. Dabei ist mir dieses passiert:
bash-2.04# chown root:root ./* bash: /bin/chown: Die Argumentliste ist zu lang bash-2.04# ls -l | wc -l 6114
Sowas kann man am besten mit find + xargs erschlagen[1]. xargs füllt
die Kommadozeile immer so weit auf, wie es geht.
find . -print0 | xargs -0 chown root.root
Thorsten
[1] Natürlich auch mit chown -R, aber die manpage hast du ja sicher
vorher gelesen ... und wir Unixer mögen's ja etwas kryptischer ;-)
--
Thorsten Jens
Hallo, On Sam, 17 Feb 2001, Andreas Rathgeber wrote:
Ich habe gerade versucht die Rechte meiner lokalen - mit diff's aufgefrischten - Supportdatenbank anzupassen. Dabei ist mir dieses passiert:
bash-2.04# chown root:root ./* bash: /bin/chown: Die Argumentliste ist zu lang
[..]
Weiß jemand, wieviele Argumente an chmod und chown übergeben werden können? Kann man das irgendwo anpassen? Dabei handelt es sich vielleicht um den Substitutionsmechanismus der Bash?
AFAIK ja. Und die Begrenzung liegt AFAIK in der maximalen Laenge der Kommandozeile (ein paar tausend Zeichen). Die kann man IIRC beim kompilieren auch anpassen, aber das ist eigentlich nicht noetig... Fuer solche Faelle gibt's xargs, das die Argumente die es bekommt "Portionsweise" weitergibt. ls | xargs chmod 644 Oder man nimmt gleich find oder die Kombination aus find und xargs (besonders hilfreich, wenn Leerzeichen usw. in den Dateinamen vorkommen, da per Option -print0 bzw. -0 _nur_ das ASCII \x00 als Argument-trenner angesehen wird und nicht (wie sonst) Leerzeichen, Tabs, und newlines...): find . -type f -exec chmod 644 {} \; find . -type f -print0 | xargs -0 chmod 644 Beide Varianten koennen je nach Anwendungsfall (Kommando das auf den Dateien ausgefuehrt werden soll) Vor- und Nachteile haben. Die erste Variante ist mir einer for-Schleife vergleichbar, da das Kommando auf jeder einzelnen Datei ausgefuehrt wird, bei der zweiten, bekommt das Kommando die Argumente (Dateinamen) in "Paketen" uebergeben... Naeheres dazu in den manpages von find und xargs. CU David -- Support bacteria - it's the only culture some people have!
participants (4)
-
Adalbert Michelic
-
Andreas Rathgeber
-
David Haller
-
Thorsten Jens