Re: Dateien via Skript löschen
Ruediger Noack <ernohl@yahoo.de> wrote:
> Michael Koch wrote:
>>Wie geschrieben, kommt drauf an was gemacht wird.
> Die von Dir beschriebene Funktionsweise von xargs erschien mir ja zuerst
> einleuchtend. Jetzt habe ich aber mal in die man page gesehen:
> -- snip --
> and executes the command (default is /bin/echo) one or more times
> with any initial-arguments followed by arguments read from standard input
> ...
> Run up to max-procs processes at a time; the default is 1.
> -- snap --
> Das ganze sagt mir, dass xargs genauso viele Prozesse aufruft, wie es
> Argumente erhält, mit der Option -P allerdings evtl. parallel.
Nein. s.u.
> Woher sollte xargs auch wissen, wieviele Argumente das aufgerufene
> Programm verträgt? Stelle Dir mal nur ein cp oder mv vor.
Das (vernuenfig programmierte) Programm ist nicht das beschraenkende
Element, vielmehr gibt es im Kernel eine Beschraenkung fuer die
maximale Laenge der Kommandozeile und _die kennt_ xargs.
xargs gibt dem Kommando gerade soviele Argumente mit, dass diese
Beschraenkung nicht ueberschritten wird. Erst wenn sich nicht alles
auf einmal ausgeht, kommt die Option -P zum Zug, mit -P1 wartet es bis
das erste "rm Liste vieler Dateien" fertig ist, ehe es das naechste
"rm Liste vieler Dateien" aufruft, mit -P2 laufen gleichzeitig
zwei rm-Prozesse, etc.
BTW: find|xargs ist _viel schneller:_
------------------------------
ametzler@downhill:/dev/shm> time { find 2002-messages-jul -type f -exec rm \{} \; > /dev/null ;}
real 0m0.489s
user 0m0.270s
sys 0m0.220s
ametzler@downhill:/dev/shm> time { find 2002-messages-jul -type f -print0 | xargs -0 rm > /dev/null ;}
real 0m0.012s
user 0m0.000s
sys 0m0.010s
------------------------------
Das ist der Unterschied zwischen sofort und Gedenkpause,
2002-messages-jul ist nur ein 1 MB grosser Maildir-Mailfolder mit 260
Nachrichten/Dateien, beim Aufruf der Kommandos kommt es zu keinen
Festplattenzugriffen, rm, glibc sowie der fragliche Mailfolder liegen
komplett im Cache.
Lesetipp:
| Newsgroups: de.comp.os.unix.linux.infos,de.answers,news.answers
| Subject: de.comp.os.unix.linux.infos - FAQ (section2)
| Message-ID: <dcoul-faq_2002244234807@mid.downhill.at.eu.org>
|
| 2.36 Ich erhalte die Fehlermeldung Argument list too long, wenn ich in
| einem Verzeichnis mit sehr vielen Dateien mit rm * versuche, alle
| Dateien zu löschen.
cu andreas
--
FAQ dieser Liste http://dugfaq.sylence.net/
Unofficial _Debian-packages_ of latest _tin_
http://www.logic.univie.ac.at/~ametzler/debian/tin-snapshot/
Reply to: