• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Wechselnde Pfade in einer Datei ersetzen: Geht das? Wie

ojkastl

Hacker
Hallo,

eine Frage an alle die sich mehr damit auskennen als ich:

Ich versuche gerade die Download.config-Datei von Azureus soweit zu bearbeiten, dass ich beim Dualboot unter Windows die Downloads fortsetzen kann.

Vorgeschichte: Der Download-Ordner ist unter Suse in /45gb_speicher/Downloads/Azureus_Torrents/ zu finden, unter Windows unter D:\Downloads\Azureus_torrents\. Darin gibt es einen Ordner linux, in dem die Torrent-Dateien gespeichert werden.


Die Konfig-Datei sieht z.B. so aus:

Code:
9:downloadsld
9:allocatedi1e
9:completedi0e
12:creationTimei1131723840432e
9:discardedi16384e
10:downloadedi26689437e
15:file_prioritiesli-1ei-1ei-1ei-1ei-1ee
10:forceStarti0e
9:hashfailsi0e
5:maxdli0e
5:maxuli0e
4:path
[b]45:/45gb_speicher/Downloads/Azureus_Torrents/iso[/b]
10:persistenti1e
8:positioni1e
8:save_dir
[b]41:/45gb_speicher/Downloads/Azureus_Torrents[/b]
9:save_file
3:iso
18:secondsDownloadingi870e
18:secondsOnlySeedingi0e
5:statei70e
7:torrent
[b]80:/45gb_speicher/Downloads/Azureus_Torrents/linux/SUSE-10.0-CD-OSS-i386-GM.torrent[/b]
12:torrent_hash20:ÛÍÔ*î¥xŒG

Der Übersichtlichkeit halber hab ich das mal in mehrere Zeilen zerlegt. Eigentlich ist das alles in einer Zeile, alles ohne Leerzeichen. Und das auch wenn es mehrere Downloads sind.
Die Syntax ist wohl ZAHL:WERT, wobei ZAHL die Anzahl der Stellen des WERTes angibt.

Ich hab mal testweise
- alle Vorkommen von /45gb_speicher/ in D:\Downloads\
- alle / in den Pfaden in \ (nicht überall, in den Hashes z.B. nicht)
- die Zahlen

geändert. Dann geht es. Ist aber halt nur als Test möglich. Weil es extrem aufwendig ist. Alles in mehrere zeilen zerlegen, damit man überhaupt durchblickt. Dann die Pfade ändern, die ZAHLEN richten, alles wieder in eine Zeile,...

Meine Frage:

Ich muss praktisch für jeden Download an drei Stellen ändern:

1. Das Download-Verzeichnis ändert sich von

Code:
41:/45gb_speicher/Downloads/Azureus_Torrents
zu
Code:
29:D:\Downloads\Azureus_Torrents

Das ist immer so, sollte per "Suchen und Ersetzen" gehen, da nimmt man wohl sed dazu. Glaub ich.

2.
Code:
45:/45gb_speicher/Downloads/Azureus_Torrents/iso
wird zu
Code:
33:D:\Downloads\Azureus_Torrents\iso

Da müsste man auch die Zahl ändern, und zwar je nachdem wieviel dahinter noch dranhängt. Also in diesem Fall 42+iso=45 werden zu 30+iso=33.

3.
Code:
80:/45gb_speicher/Downloads/Azureus_Torrents/linux/SUSE-10.0-CD-OSS-i386-GM.torrent
wird zu
Code:
78:D:\Downloads\Azureus_Torrents\linux\SUSE-10.0-CD-OSS-i386-GM.torrent

Hier ist auch die Zahl fällig.

FAZIT:
Man müsste immer
/45gb_speicher/Downloads/Azureus_Torrents ersetzen mit D:\Downloads\Azureus_Torrents

/45gb_speicher/Downloads/Azureus_Torrents/linux ersetzen mit D:\Downloads\Azureus_Torrents\linux

Die Zahlen anpassen.

Geht das? Wenn ja wie? Es würde mir reichen wenn mir jemand sagt welches Programm das kann (das Ersetzen ist wohl sed, aber die Zahlen? Die sich ja immer ändern...), auch wenn ich ein fertiges Skript nicht ablehnen würde ;-)

Danke für eure Mühe, auch das ihr schon mal bis hierhin gelesen habt ;-)
Saber
 

TeXpert

Guru
erst mal, das Zerlegen von Dateien (und wieder zusammensetzten) geht auch, wenn Du einen entsprechenden Break-Point Definieren kannst (sed und irgenwas in \n und wieder zurück wandeln)

Zahlen ändern: das Dingen durchlaufen, die Patterns:

Code:
zahl:pfad

rausfischen, darin getrennt PFAD ändern (z.B. sed) und die Zahl mit den normalen Bash-Arithmetik-Methoden manipulieren. also das wäre BASH+sed

jetzt mal eine andere Idee, Du schreibst von 1-Zeile, d.h. die Dateistruktur ist:
Code:
zahl1:wert1:zahl2:wert2:zahl3:wert3:...:zahlN:wertN
wobei zahl_i und wert_i korespondieren?

Idee als Pseudocode und nicht konkret

Code:
while CURRENTSTRING not empty
do
   WORK=$(echo "$CURRENTSTRING | cut -d ":" -f 1-2)
   CURRENTSTRING =$(echo "$CURRENTSTRING | cut -d ":" -f 3-)
   ZAHL=$( echo $WORK | cut -d ":" -f 1)
   WERT=$( echo $WORK | cut -d ":" -f 2)
   ### jetzt zahl und Wert manipulieren
   NEWSTRING="$NEWSTRING:$ZAHL:$WERT"
done

ich glaube aber, Du solltest in das kalte Perl-Wasser springen :) das dürfte einiges vereinfachen
 

regexer

Advanced Hacker
Saber_Rider schrieb:
Der Übersichtlichkeit halber hab ich das mal in mehrere Zeilen zerlegt. Eigentlich ist das alles in einer Zeile, alles ohne Leerzeichen. Und das auch wenn es mehrere Downloads sind.
Die Syntax ist wohl ZAHL:WERT, wobei ZAHL die Anzahl der Stellen des WERTes angibt.
Irgendetwas kann da noch nicht stimmen. "downloadsld" hat für mich nicht 9 stellen. Ebenso hat "maxuli0e" nicht 5 byte länge. Kannst du mal deine Datei ohne veränderungen posten?
 

SoeDib

Member
Also, wenn's keine allgemeine Lösung sein muß,
Code:
#!/bin/sed -f

s@41:/45gb_speicher/Downloads/Azureus_Torrents@29:D:\\Downloads\\Azureus_Torrents@
s@45:/45gb_speicher/Downloads/Azureus_Torrents/iso@33:D:\\Downloads\\Azureus_Torrents\\iso@
s@80:/45gb_speicher/Downloads/Azureus_Torrents/linux/SUSE-10.0-CD-OSS-i386-GM.torrent@68:D:\\Downloads\\Azureus_Torrents\\linux\\SUSE-10.0-CD-OSS-i386-GM.torrent@
als z.B. "pathchange.sed" speichern, chmod +x und mit "./pathchange.sed /hier/deine/configdatei" aufrufen

Ist natürlich als andere als schön.

:!: Edit: Habe im letzten sed-Befehl 78:D:\... zu 68:D:\... verändert, weil das besser zu der Zahlendifferenz der anderen beiden Ersetzungen passt.
 
OP
O

ojkastl

Hacker
So, danke erstmal. Werd das alles mal ausprobieren.

Ach ja, hier eine Originaldatei:

Code:
d9:downloadsld9:allocatedi1e9:completedi1000e12:creationTimei1131542687437e
9:discardedi7520256e10:downloadedi4634482291e15:file_prioritiesli-1ee10:forceStarti0e
9:hashfailsi0e5:maxdli0e5:maxuli0e4:path37:/Daten/debian-31r0a-i386-binary-1.iso10:persistenti1e
8:positioni1e8:save_dir6:/Daten9:save_file30:debian-31r0a-i386-binary-1.iso18:secondsDownloadingi55149e
18:secondsOnlySeedingi43e5:statei70e7:torrent86:/45gb_speicher/Downloads/Azureus_Torrents/linux/debian-31r0a-i386-binary-1.iso.torrent
12:torrent_hash20:ëJöÈÉÂt&UÒBb8:uploadedi485557907e7:uploadsi4eed9:allocatedi1e
9:completedi1000e12:creationTimei1131475155773e9:discardedi212992e10:downloadedi61983133e
15:file_prioritiesli-1ee10:forceStarti0e9:hashfailsi0e5:maxdli0e5:maxuli0e4:path
72:/45gb_speicher/Downloads/Azureus_Torrents/install-x86-minimal-2005.1.iso10:persistenti1e8:positioni2e
8:save_dir41:/45gb_speicher/Downloads/Azureus_Torrents9:save_file30:install-x86-minimal-2005.1.iso
18:secondsDownloadingi418e18:secondsOnlySeedingi60377e5:statei75e7:torrent
86:/45gb_speicher/Downloads/Azureus_Torrents/linux/install-x86-minimal-2005.1.iso.torrent12:torrent_hash
20:x»
ážÔ['/9^OÎX8:uploadedi9198350e7:uploadsi2eed9:allocatedi1e9:completedi0e12:creationTimei1131723840432e
9:discardedi16384e10:downloadedi26689437e15:file_prioritiesli-1ei-1ei-1ei-1ei-1ee10:forceStarti0e
9:hashfailsi0e5:maxdli0e5:maxuli0e4:path45:/45gb_speicher/Downloads/Azureus_Torrents/iso
10:persistenti1e8:positioni1e8:save_dir41:/45gb_speicher/Downloads/Azureus_Torrents9:save_file3:iso
18:secondsDownloadingi870e18:secondsOnlySeedingi0e5:statei70e7:torrent
80:/45gb_speicher/Downloads/Azureus_Torrents/linux/SUSE-10.0-CD-OSS-i386-GM.torrent
12:torrent_hash20:ÛÍÔ*î¥xŒG

Es stimmt dass eine Zahlen nicht stimmen, ich hab das nur bei den Pfaden überprüft. 9:downloads stimmt, das ld dahinter ist halt seltsam.
 
OP
O

ojkastl

Hacker
@SoeDib:

Das wäre dann halt nur für einen speziellen Download, oder? Da müsste ich dann für jedes per Hand ausrechnen, reinschreiben und ausführen? Oder hab ich das falsch verstanden?
 

SoeDib

Member
Saber_Rider schrieb:
@SoeDib:

Das wäre dann halt nur für einen speziellen Download, oder? Da müsste ich dann für jedes per Hand ausrechnen, reinschreiben und ausführen? Oder hab ich das falsch verstanden?
Nee, hast du nicht. War'n dünnsinniger Schnellschuss. :oops:
Als Buße hab ich aber mal was zusammengebastelt:
Code:
#!/bin/bash

replace_path() {
	item=`echo $line|sed -e "s@.*:\($1[[:digit:]]\+:/45gb_speicher/.*\)[[:digit:]]\+:$2.*@\1@"`
	item_l=${item%%:*}
	item_l=${item_l#$1}
	item_l_n=$[$item_l-12]
	item_dir=${item#*:}
	item_dir=`echo $item_dir|sed -e 's@/45gb_speicher/@D:\\\\\\\\@g; s@/@\\\\\\\\@g'`
	item_n="${1}${item_l_n}:${item_dir}"
	line=`echo $line|sed -e "s@${item}@${item_n}@"`
#	echo $line
}

#set -x
test -e Download.config.new && mv Download.config.new Download.config.new.bak
cat Download.config|sed -e 's/torrent_hash/torrent_hash\n/g' > Download.config.tmp;
cat Download.config.tmp | while read line
	do	if expr "$line" : '.*save_dir[[:digit:]]\+:/45gb_speicher/' > /dev/null
		then	replace_path save_dir save_file
		fi
		if expr "$line" : '.*path[[:digit:]]\+:/45gb_speicher/' > /dev/null
		then	replace_path path persistent
		fi
		if expr "$line" : '.*torrent[[:digit:]]\+:/45gb_speicher/' > /dev/null
		then	replace_path torrent torrent_hash
		fi
		echo -n "$line" >> Download.config.new
	done
# mv Download.config Download.config.linux
# mv Download.config.new Download.config
# rm Download.config.tmp

Das Funktionieren hängt aber noch an zwei Dingen:
1.) Im ersten Block deiner geposteten vollständigen Konfig-Datei ist der torrent zwar unter /45gb_speicher/... abgelegt, die eigentlichen Daten landen aber unter /Daten/. Mein Skript würde den .torrent-Ort konvertieren, den Daten-Pfad/Ort aber nicht (wie auch). Ich bin mir nicht so sicher, ob das zu vernünftigen Ergebnissen führen kann.
2.)Im 2. Block erscheint im Hash ein Zeilenwechsel ("torrent_hash20:x»
ážÔ['/9^OÎX"). Ist der im Original auch da, oder ist das ein Forum-Artefakt?
 
OP
O

ojkastl

Hacker
SoeDib schrieb:
Das Funktionieren hängt aber noch an zwei Dingen:
1.) Im ersten Block deiner geposteten vollständigen Konfig-Datei ist der torrent zwar unter /45gb_speicher/... abgelegt, die eigentlichen Daten landen aber unter /Daten/. Mein Skript würde den .torrent-Ort konvertieren, den Daten-Pfad/Ort aber nicht (wie auch). Ich bin mir nicht so sicher, ob das zu vernünftigen Ergebnissen führen kann.

Der Grund war, das Download-Verzeichnis lag auf einer FAT32-Partition, und da ist nix mit 4,4GB DVD-Image. Hat sich geändert, liegt jetzt alles auf einer Partition.

SoeDib schrieb:
2.)Im 2. Block erscheint im Hash ein Zeilenwechsel ("torrent_hash20:x»
ážÔ['/9^OÎX"). Ist der im Original auch da, oder ist das ein Forum-Artefakt?

Der ist da im Original drin, ich vermute dass der Hash-Wert das entsprechende Zeichen für einen Zeilenumbruch enthält.

P.S. Da diese Seite richtig behämmert aussieht, hab ich oben doch wieder einige Umbrüche eingefügt. Dann ist die Zeile nicht mehr so lang.
 

SoeDib

Member
Saber_Rider schrieb:
SoeDib schrieb:
Das Funktionieren hängt aber noch an zwei Dingen:
2.)Im 2. Block erscheint im Hash ein Zeilenwechsel ("torrent_hash20:x»
ážÔ['/9^OÎX"). Ist der im Original auch da, oder ist das ein Forum-Artefakt?
Der ist da im Original drin, ich vermute dass der Hash-Wert das entsprechende Zeichen für einen Zeilenumbruch enthält.
Iih bäh.
Nun gut, probier doch mal dies hier aus:
Code:
#!/bin/bash

replace_path() {
	item=`echo $line|sed -e "s@.*:\($1[[:digit:]]\+:/45gb_speicher/.*\)[[:digit:]]\+:$2.*@\1@"`
	item_l=${item%%:*}
	item_l=${item_l#$1}
	item_l_n=$[$item_l-12]
	item_dir=${item#*:}
	item_dir=`echo $item_dir|sed -e 's@/45gb_speicher/@D:\\\\\\\\@g; s@/@\\\\\\\\@g'`
	item_n="${1}${item_l_n}:${item_dir}"
	line=`echo $line|sed -e "s@${item}@${item_n}@"`
#	echo $line
}

#set -x
newline='
'
test -e Download.config.tmp && mv Download.config.tmp Download.config.tmp.bak
echo "`cat Download.config`" | sed -e 's/$/@@@@@/; s/torrent_hash/torrent_hash\n/g' > Download.config.tmp
while read line
do	if expr "$line" : '.*save_dir[[:digit:]]\+:/45gb_speicher/' > /dev/null
	then	replace_path save_dir save_file
	fi
	if expr "$line" : '.*path[[:digit:]]\+:/45gb_speicher/' > /dev/null
	then	replace_path path persistent
	fi
	if expr "$line" : '.*torrent[[:digit:]]\+:/45gb_speicher/' > /dev/null
	then	replace_path torrent torrent_hash
	fi
	line="${line//@@@@@/$newline}"
	newconfig="${newconfig}${line}"
done < Download.config.tmp
echo -n "${newconfig%${newline}*}" > Download.config.tmp
cat Download.config.tmp
# mv Download.config Download.config.linux
# mv Download.config.tmp Download.config
Das ist zwar keine "absolut sichere" Lösung, aber die Wahrscheinlichkeit, daß in den Hashes etwas wie "@@@@@" auftaucht, dürfte echt klein sein. Probier's doch mal aus, und wenn du meinst, das läuft, kannst ja mal die letzten beiden Zeilen einkommentieren und Windows anmachen :twisted:

Grüße,
SoeDib
 

regexer

Advanced Hacker
TeXpert schrieb:
ich glaube aber, Du solltest in das kalte Perl-Wasser springen :) das dürfte einiges vereinfachen
Um den Vorschlag von TeXpert aufzunehmen: Es folgt ein Perl-script, bei dem man nur suche- und ersetze-strings anpassen müsste. Die Längen der such- und ersetze-texte werden hierbei automatisch ausgerechnet und vorne drangehängt. Man benütze übrigens das script so:
Code:
script.pl <eingabedatei >ausgabedatei
Code:
#!/usr/bin/perl
use strict;

my (@suche, @ersetze);

  $suche[0]='/45gb_speicher/Downloads/Azureus_Torrents';
$ersetze[0]='D:\Downloads\Azureus_Torrents';

  $suche[1]='/45gb_speicher/Downloads/Azureus_Torrents/iso';
$ersetze[1]='D:\Downloads\Azureus_Torrents\iso';

  $suche[2]='/45gb_speicher/Downloads/Azureus_Torrents/linux/SUSE-10.0-CD-OSS-i386-GM.torrent';
$ersetze[2]='D:\Downloads\Azureus_Torrents\linux\SUSE-10.0-CD-OSS-i386-GM.torrent';

undef $/;      # gesamte Datei auf einmal lesen
$_=<STDIN>;    # von Standardeingabe lesen

foreach my $i (0..$#suche) {
  # Nummern und doppelpunkt generieren
  $suche[$i]=  length($suche[$i]) . ":" . $suche[$i];
  $ersetze[$i]=length($ersetze[$i]) . ":" . $ersetze[$i];

  # Ersetzen
  s/$suche[$i]/$ersetze[$i]/g;
}
print;         # gesamte Datei auf einmal ausgeben
 
OP
O

ojkastl

Hacker
@notoxp:

Ich werds mal probieren. Aber da müsste ich für jeden Download extra die Ersetz-Befehle angeben (im Beispiel .../iso), oder?

Könnte man die auch auslesen? Wär bequemer, aber wenn es nicht geht: Auch gut.

NACHTRAG 20:06

Ich hab beide Skripte jetzt mal auf die obere Datei losgelassen. Beide scheinen zu funktionieren, ich hab noch nicht Windows gebootet und getestet.
Was mir aber aufgefallen ist: Ein Zeichen fehlt in beiden Versionen, aus

torrent_hash20:ÛÍÔ*î¥xŒG
wird zu
torrent_hash20:ÛÍÔ*î¥xŒG
.

Das ist ja ekelhaft, was da an Sonderzeichen, Zeilenumbrüchen und so drin ist. Ich befürchte das wird wohl nix werden, was da alles an Haken drin ist.
 

TeXpert

Guru
Bei solchen zeichen musst Du zusehen, dass Du die Datei binär öffnest und dann algorithmisch Schritt für schritt durchgehst, so großt ist die ja nicht :) d.h. Du solltest Dir einen eigenen kleinen Parser schreiben.
 

regexer

Advanced Hacker
Saber_Rider schrieb:
Ich werds mal probieren. Aber da müsste ich für jeden Download extra die Ersetz-Befehle angeben (im Beispiel .../iso), oder?

Könnte man die auch auslesen? Wär bequemer, aber wenn es nicht geht: Auch gut.
Grundsätzlich geht in dieser Beziehung alles. Es kommt nur auf die Fragestellung an. Und ich habe mich ziemlich genau an deine Vorlage gehalten (... wird zu ...).
Was mir aber aufgefallen ist: Ein Zeichen fehlt in beiden Versionen, aus

torrent_hash20:ÛÍÔ*î¥xŒG
wird zu
torrent_hash20:ÛÍÔ*î¥xŒG
.
Hmmm, ich verstehe jetzt nicht ganz, was daran fehlt. Die beiden Zeilen, die du hier gepostet hast sind doch identisch, oder?
 
OP
O

ojkastl

Hacker
@notoxp:
Ich Depp, ich hab beide Zeilen gleich reinkopiert, und wollte dann das rausfallende Zeichen weglöschen. Also nochmal richtig:

torrent_hash20:ÛÍÔ*î¥xŒG

wird zu

torrent_hash20:ÛÍÔ*î¥x G


Das war für einen Download, den aus dem obigen Beispiel.

In der Realität wird dieses File sich natürlich ändern, und ich hatte gehofft, dann einfach ein Skript drüberlaufen zu lassen, das schaut was für Downloads drin stehen, bei denen die Pfade anpasst, und das als Windows-Config speichert. Oder so.
Wenn ich für jeden Download manuell anpassen müste würde es zwar auch gehen, aber halt weit weniger bequem. Aber man kann halt nicht alles haben.
 

TeXpert

Guru
Saber_Rider schrieb:
In der Realität wird dieses File sich natürlich ändern, und ich hatte gehofft, dann einfach ein Skript drüberlaufen zu lassen, das schaut was für Downloads drin stehen, bei denen die Pfade anpasst, und das als Windows-Config speichert. Oder so.
Wenn ich für jeden Download manuell anpassen müste würde es zwar auch gehen, aber halt weit weniger bequem. Aber man kann halt nicht alles haben.

klar geht das, aber wegen der Sonderzeichen _kann_ ein reiner Texteditor evtl. problematisch werden (auch wenn sed fast alles kann...) ich glaube ich würde an Deiner Stelle ein kleines C-programm schreiben das auf Byte-Ebene mit den Zeichen hantiert.... man kann davon ausgehen, dass das Zeichen ':' als Trenner funktioniert so dass das einlesen problemlos gehen sollte...
 
OP
O

ojkastl

Hacker
TeXpert schrieb:
ich glaube ich würde an Deiner Stelle ein kleines C-programm schreiben das auf Byte-Ebene mit den Zeichen hantiert.... man kann davon ausgehen, dass das Zeichen ':' als Trenner funktioniert so dass das einlesen problemlos gehen sollte...

Da müsste ich doch mal anfangen mich mit C zu beschäftigen. Oh weh. Aber es wird evtl. nix anderes übrig bleiben.

Ich hab mal im Azureus-Forum gefragt, bisher aber noch keine Antwort.
 

TeXpert

Guru
vom Prinzip sieht das so aus:

Code:
#include <stdio.h>

int main() {
   int c;

   while ( (c = getchar()) != EOF )
   {
      /* mach was mit dem zeichen */
   }
   return 0;
}

dieses mach was wird halt interessant :) Du kannst jetzt mit

Code:
if ((char)c != 'X')
nach einem Trennzeichen X suchen und den Teil vor und nach dem zeichen speichern und entsprechend bearbeiten....

aber ohne eine echte Datei kann Dir da keiner groß weiterhelfen...
 
OP
O

ojkastl

Hacker
TeXpert schrieb:
aber ohne eine echte Datei kann Dir da keiner groß weiterhelfen...

Ich kann die ganze momentane Datei gerne ins Netz stellen, aber ich wollte euch ja nicht die ganze Arbeit aufhalsen. Aber mit C ist halt doch ein Stück härter als ein bißchen Bash, dass schaff ich noch. Aber ich wollte sowieso mal mit C anfangen (ihr kennt das ja, morgen fang ich damit an...)
 

regexer

Advanced Hacker
Saber_Rider schrieb:
und ich hatte gehofft, dann einfach ein Skript drüberlaufen zu lassen, das schaut was für Downloads drin stehen, bei denen die Pfade anpasst, und das als Windows-Config speichert.
Habe mein perl-script abgeändert. Jetzt arbeitet es nur mit einem suchen/ersetzen:
Code:
#!/usr/bin/perl

use strict;

my   $suche='/45gb_speicher/Downloads/Azureus_Torrents';
my $ersetze='D:\Downloads\Azureus_Torrents';

undef $/;      # gesamte Datei auf einmal lesen
$_=<STDIN>;    # von Standardeingabe lesen

my $length_diff=length($ersetze) - length($suche);  # Längendifferenz

# Ersetzen
s/(\d+):$suche([^:]*)/$1+$length_diff . ":$ersetze" . &slash($2)/eg;

print;         # gesamte Datei auf einmal ausgeben

sub slash {       # konvertiere slash zu backslash
  my $dir=$_[0];
  $dir=~tr#\/#\\#;
  return $dir;
}
Eventuelle Schwachstellen dieses Scripts:
1. Ich gehe davon aus, dass alle direkt einem Doppelpunkt vorangestellten Ziffern die Länge sind. Nach meinem Verständnis müsste das so sein, da in Fällen, wo der Wert des Vorgängers mit einer Ziffer endet, ein "e" dazwischengeschoben wird. Das müsste also OK sein.
2. Ich kann nicht einfach "$suche" durch "$ersetze" ersetzen und die Ziffer anpassen. Ich muss auch den Nachgestellten Pfad nach Slashes durchsuchen und durch Backslashes ersetzen. Das mache ich, bis ich den nächsten Doppelpunkt finde. Doppelpunkte, die noch zum Verzeichnisnamen gehören, wären also tödlich. Das ist aber unter Windows sowieso nicht möglich. Also dürfte auch dieser Punkt in Ordnung gehen.
 
Oben