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

Re: Dateinamen kürzen



Andreas Pakulat <apaku@gmx.de>:
> On 30.06.06 01:15:54, Frank Terbeck wrote:
> > Andreas Pakulat <apaku@gmx.de>:
> > [...]
> > > Noch "besser" als for i in *.done oder for i in $(ls *.done) ist
> > > 
> > > ls *.done | while read f ; do ... ; done
> > > 
> > > gerade wenns sehr viele Dateien sind, denn dann ist die Argumentliste zu
> > > lang und man landet auf der Nase...
> > 
> > Also, an dieser Stelle kann das überhaupt nicht besser funktionieren
> > als *.done, weil du die Dateiliste so genauso gut komplett an ls
> > übergibts.
> 
> Ist ja gut :-) War ein kleiner Schnellschuss, meistens mache ich eher
> sowas:
> 
> ls | grep "done$" | while read f...

Das ist ganz einfach nicht nötig.
Unter anderem sollte man sich sicher sein, das ls nicht als Alias
expandiert und dann Optionen wie '--color=always' oder '-F' verwendet.

> > Im übrigen sollte jede Shell mit sehr langen Listen in for Schleifen
> > klarkommen.
> 
> Also die Bash hier kommt mit 3700 Mails im monatl. d-u-g Ordner nicht
> zurecht wenn ich alle auflisten lasse (73 Zeichen pro Zeile)

Da würde mich aber interessieren, welches Kommando du da anwendest.

Denn bei shellinternen Kommandos ist die Menge der Argumente lediglich
durch den zur Verfügung stehenden Speicher begrenzt.

Ich habe gerade mal eine bash gestartet und eine for Schleife mit vier
Millionen Argumenten gestartet:

for i in $(seq 1 4000000) ; do echo $i ; done

Das dauert zwar ewig und verbraucht Speicher wie nichts Gutes. Aber es
funktioniert. Wenn man die Argumentliste noch grösser macht, dann
rennt man irgendwann in "Out of Memory" Situationen, je nach dem wie
gut der jeweilige Rechner bestückt ist.

Knapp 4000 Dateien werden überhaupt kein Problem sein. Ich habe hier
nur mal zur Demonstration die *.{c,h} Dateinen in einem relativ
aktuellen Linux Kernel Baum gezählt:

[snip]
/src/linux-2.6.16.16% for i in **/*.[ch] ; do echo $i ; done | wc -l
15793
[snap]

Wo ich schon mal dabei bin, zähle ich noch schnell sämtliche regulären
Dateien auf meinem Laptop:

[snap]
~% for i in /**/*(.) ; do echo $i ; done | wc -l
193183
[snap]

Also knapp Zweihunderttausend Dateien. Alles kein Problem.
Ich bin im realen Leben bisher noch nie an das theoretische Limit des
Speichers angelangt. Höchstens durch Experimente wie das oben
genannte.

Gruss, Frank



Reply to: