Vergleichen von (sehr vielen) Dateien ...

30/09/2009 - 14:27 von Bodo Schulz | Report spam
Moin Moin!

Ich habe ein größeres Performanceproblem eines 'geerbten' Bash-Scriptes.
Jaaaa, ich weiß durchaus, dass die Bash nicht gerade ein
Geschwindigkeitskünster ist, aber ich kann (und darf auch) nicht das ganze
neu machen. :(

Das eigentliche Problem ist wie folgt:
Ich habe 2 Verzeichnissbàume, die hauptsàchlich .jsp Dateien beinhalten.
Zur Zeit sind das ~15.000 Stück.
In Baum A fallen neue Dateien hinein, oder werden Dateien gelöscht.
Das Script vergleicht Baum A mit Baum B und muss für geànderte Dateien (die
also in Baum B fehlen) "irgendwas" veranstalten.
Vor dem Vergleich wird mittels find eine entsprechende Variable mit allen
Dateien definiert:
,--
len=$(( ${#dir} +2 ))
FILES="`find ${dir}/ -name "*.jsp" | cut -c ${len}-`"
`--

Das Vergleichen sieht dann so aus:
,--
for FILE in ${FILES}
do
f=`echo ${FILE##*/}`
d=`echo ${FILE%/*}`

if [ \( ${a}/${FILE} -ot ${b}/${FILE} \) -o \( ${a}/${FILE} -nt
${b}/${FILE} \) ]
then
# und hier kommt das gesummse ...
fi
done
`--

Das dumme an dieser Geschichte ist halt, wenn die beiden Verzeichnissbàume
identisch sind, wird trotzdem die Schleife komplett durchgezogen.
Das kann dann schon mal bis zu 7 Minuten dauern, je nachdem, was sonst noch
auf der Kiste los ist ...

Ich würde das ganz gern etwas optimaler gestalten, beiss mir momentan aber
die Zàhne aus. Wahrscheinlich seh ich den Wald vor lauter Bàumen nicht mehr
:(

Vielleicht habt ihr ein paar Tipps für mich?

Gruß,
Bodo
 

Lesen sie die antworten

#1 Holger Marzen
30/09/2009 - 15:14 | Warnen spam
* On Wed, 30 Sep 2009 14:27:04 +0200, Bodo Schulz wrote:

Das eigentliche Problem ist wie folgt:
Ich habe 2 Verzeichnissbàume, die hauptsàchlich .jsp Dateien beinhalten.
Zur Zeit sind das ~15.000 Stück.
In Baum A fallen neue Dateien hinein, oder werden Dateien gelöscht.
Das Script vergleicht Baum A mit Baum B und muss für geànderte Dateien (die
also in Baum B fehlen) "irgendwas" veranstalten.



Zwei schnelle ls in eine Datei und dann ein diff drauf?

Ähnliche fragen