Re: Dateien per Bash-Script sortieren

From: Christoph Sandhaus <stift@draupadi.de>
Date: Tue Jun 06 2006 - 11:36:05 CEST

> > Könnte es sein, daß Andreas das Interesse am Sortieren verloren hat? ;)
> Hi!

Hallöle!

> Doch! Ich hatte viel um die Ohren, konnte das erst Donnertag und Freitag
> umsetzen. So sieht's aus (fast unverändert):
[...]
> Klappte sehr gut, dauerte allerdings schön lange. Insgasamt fanden ca.

Joo, das ist das Problem bei Shell Scripten.
Man muß zu meiner Lösung auch anmerken:
jedes mal, wenn "$(...)" erreicht wird, öffnet sich eine Subshell. Das kostet
enorm Zeit. Wenn man jetzt 70.000 Dateien bearbeitet und es werden ca. 4
Subshells pro Durchlauf gestartet, ist das keine performante Lösung. Deshalb
muß man mit soetwas vorsichtig sein, wenn es zeitkritische Umgebungen geht.
Dafür ist es lesbar. ;)

> 70000 Dateien ein neues Zuhaus. Du hattest nur einen Tippfehler im Script,
> obwohl Du sagtest, Du hättest das im Mailer getippt.

So war es auch und ungetestet. ;)

Was man evtl. verbessern könnte, damit es (deutlich) schneller wird
(ungetestet):
Ersetzte
  TT=$(echo "$2" | cut -c1-2)
  MM=$(echo "$2" | cut -c3-4)
  JJ=$(echo "$2" | cut -c5-8)
durch
  TT=${2:0:2}
  MM=${2:2:2}
  JJ=${2:4:4}

Erklärung:
mit '${...}' greifst zu auf eine Variable zu, z.B.: '${KUNDE}'
an erster Stelle steht die '2', also wird wieder auf '$2' zugegriffen (erste
Position in den geschweiften Klammern).
Die 2. Position (nach dem Doppelpunkt) in den Klammern gibt an, ab welcher
Position die Zeichenkette ausgegeben werden sollten, hier also jeweils
Postition 0, 2 und 4.
Die 3. Position gibt an, wieviele Zeichen gelesen werden sollen.
Also bedeutet 'TT=${2:0:2}':
lese aus '$2', ab Position 0, 2 Zeichen.

Hier ein Danke an Nils. Hätte er seinen Vorschlag nicht geschrieben, hätte ich
an diese Schreibweise nicht gedacht. Der Einfachheit halbe benutze ich halt
meistens Subshells.

Möchtest du den Zeitunterschied mal messen, so kannst du das mit 'time'
machen:
  time ./meinShellScript.sh
Am Ende bekommst du dann eine solche Ausgabe:
  real 0m0.013s
  user 0m0.007s
  sys 0m0.005s

> Vielen Dank!
> Andreas

Gerne geschehen und noch viel Spaß,
Christoph
Received on Tue, 6 Jun 2006 11:36:05 +0200

This archive was generated by hypermail 2.1.8 : Tue Jun 06 2006 - 11:36:18 CEST