[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: