Re: out of inodes

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 12 Jan 2005 10:47:56 +0100 (CET)

Ulrich Spoerlein <q(at)uni.de> wrote:
> On Tue, 11.01.2005 at 17:11:12 +0100, Oliver Fromme wrote:
> > > [kern.argmax laeuft ueber]
> > Ganz einfach:
> >
> > echo * | xargs rm
> >
> > und wech ist der Dreck. Geht ratz-fatz.
>
> Niemals,

Doch, immer. :-)

> * wird schliesslich von der Shell expandiert, und dann knallts.

Da echo ein Shell-builtin ist, wird exec*() gar nicht ver-
wendet, ergo spielt kern.argmax keine Rolle. Aus demselben
Grund kann man z.B. auch problemlos

for X in *; do rm $X; done

schreiben, da »for« selbstverständlich ebenfalls ein Shell-
builtin ist. Die Lösung mit echo|xargs ist allerdings er-
heblich schneller, da »rm« nicht für jede Datei einzeln
aufgerufen wird, sondern immer für mehrere Dateien auf ein-
mal.

> Du meintest wohl die uebliche find|xargs Kombo (siehe anderes Posting).

Nein. Mit »find« geht es i.allg. nur entweder unportabel
(-maxdepth 1) oder erheblich aufwendiger (mit grep o.ä.).

> Um doch noch was sinnvolles zu leisten:
> Hat jemand mal find -delete vs. find|xargs rm gebenchmarkt?

Ich habe es nicht gemessen, aber in der Theorie müßte »find
-delete« geringfügig schneller sein, da es unlink(2) selbst
ausführt und nicht rm(1) aufruft. Davon abgesehen ist es
sicherer, da es auch mit beliebig ungewöhnlichen Dateinamen
(Whitespace, Backslashes, Controls) funktioniert.

Andererseits ist »-delete« unportabel und kein Standard,
ebenso wie (leider) »print0« und die Option -0 bei xargs.

Manchmal sind Standards echt blöd.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"Python tricks" is a tough one, cuz the language is so clean. E.g.,
C makes an art of confusing pointers with arrays and strings, which
leads to lotsa neat pointer tricks; APL mistakes everything for an
array, leading to neat one-liners; and Perl confuses everything
period, making each line a joyous adventure <wink>.
        -- Tim Peters
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 12 Jan 2005 - 10:49:09 CET

search this site