Re: mv oder ls: Argument list too long

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 31 Aug 2004 14:08:05 +0200 (CEST)

Olaf Hoyer <ohoyer(at)ohoyer.de> wrote:
>
> Bin gerade dabei, u.a. Homepageinhalte/Archive zu verschlimmbessern, und
> stosse immer wieder auf Begrenzungen bei ls/mv,

Es sind keine Begrenzungen dieser Tools (und auch nicht der
Shell, wie häufig gemutmaßt wird), sondern der exec*()-
Systemcalls unter UNIX. Argumentvektor und Environment
haben zusammen ein Limit von 64 Kbytes.

> deckard# ls Pr*.jpg
> /bin/ls: Argument list too long.

Wenn die Spalten-Formatierung egal ist, kannst Du in dem
Fall einfach echo statt ls verwenden (»echo Pr*.jpg«).

Ansonsten, wenn die Dateien keine Leerzeichen o.ä. enthal-
ten, geht's am einfachsten so:

$ echo Pr*.jpg | xargs ls

Wenn Leerzeichen in Dateinamen vorkommen können, mußt Du
mit »find ... -print0 | xargs -0 ...« hantieren. Details
findest Du in den find(1) und xargs(1) manpages.

> Kann man diese Argument list irgendwie vergroessern?

Ich fürchte, das geht nur durch Sourcepfuscherei. Aber
auf was willst Du es erhöhen? Wenn Du's auf verzehnfachst,
reicht's vielleicht heute, aber übermorgen stolperst Du
bei einem anderen Verzeichnis wieder drüber. Die Lösung
mit xargs dagegen ist universell und funktioniert mit be-
liebig vielen Einträgen, und ist noch dazu portabel.
Davon abgesehen steigt der exec*()-Overhead, wenn Du den
Speicherbereich für Argumente + Environment vergrößerst.

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.
One Unix to rule them all, One Resolver to find them,
One IP to bring them all and in the zone to bind them.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 31 Aug 2004 - 14:08:21 CEST

search this site