Dateinamen wiederherstellen

hell_bird

Active Member
hi,

also heute habe ich es endlich geschafft die Freebsd installationsdateien auf meinen Laptop teilweise über Nullmodemkabel und Teilweise über Disketten zu bringen. (Hat kein cd-laufwerk und kein Netzwerk und kein USB oder sonstiges, ist ein altes Thinkpad).
Da ich das Handbuch nicht genau gelesen hatte habe ich das in den Ordner d:\freebsd\inst enpackt. dann habe ich versucht es zu installieren -> ging nicht, weil die dateien in Part:\freebsd sein müssen. Windowspartition hatte ich, als ich es bemerkt habe schon gelöscht: also hab ich mir ein Dos-Tool auf Dos-Diskette gezogen und den ganzen ordner ins Wurzelverzeichnis verschoben. Natürlich , weil es DOS (suckz!) ist hat es die ganzen Dateinamen von den Packages ins 8.3 format gebracht.

Gibt es irgendeine methode die Dateien (vielleicht mit einem script anhand einer Liste) wieder richtig umzubenennen? ich will das nicht per Hand machen :eek:
 
unter dos wuerde ich an deiner stelle folgendes machen:

Code:
D:\freebsd\inst> dir /s /b >rename.bat
D:\freebsd\inst> edit rename.bat

und dann vor jeden dateinamen ein move schreiben, und dahinter dann den "richtigen" dateinamen.

nachher dann noch

Code:
D:\freebsd\inst> rename.bat

die dinger alle in einem rutsch umbenennen. das ist zwar an und fuer sich genau der gleiche aufwnd, wie wenn du das auf der konsole von hand machst, aber im editor zumindest etwas bequemer zu machen.
 
Zuletzt bearbeitet:
hmm ja das wäre die notlösung.... ich habe aber auch das freebsd basissystem mit sh . kennt jemand da einen eleganten weg der den aufwand minimiert?
 
Wenns geht natyrlich mit md5-sums ..
also unausgereift sowas wie das:
Code:
#!/usr/local/bin/bash
md5 * | cut -d'(' -f2 | tr -d '[(,),=,]' > /tmp/md5sums.tmp

for i in $(/bin/ls -1d *)
do
        sum=$(md5 $i | cut -d= -f2 | tr -d ' ')
        mv $i $(grep $sum /tmp/md5sums.tmp | cut -d' ' -f1)
done
muss natyrlich fyr csh umgeschrieben werden ;) - und wenn du's nicht fyr jedes Verzeichnis einzeln machen willst, am besten rekursiv ...
Die Frage ist erstmal ob md5 vorhanden ist - mysste aber ...
 
Vom Prinzip genial. Auf das wäre ich nie gekommen. Das muss ich morgen sofort probieren.
Habe ich das richtig verstanden? die erste Zeile muss ich auf einem Rechner ausführen auf dem die Dateinamen noch richtig sind. Da werden dann die md5 summen mit den Dateinamen in die Dateigeschrieben. Und wenn ich dann den zweiten Teil auf dem Rechner mit den verfälschten Dateinamen ausführe wird durch die md5summe bestimmt welcher name zu welcher datei gehört?

hmm muss es mir morgen nochmal genau anschauen ... warum machst du ls -ld ? das -d flag bewirkt doch, dass nicht der inhalt, sondern der Name von einem verzeichnis angezeigt wird....

kann man das auch anpassen, dass es auch unterverzeichnisse berücksichtigt? oder wird das unnötig kompliziert?

sorry bei shellprogrammierung habe ich noch fast keine Ahnung .. bin halt ein windowsuser ;)
 
Wird sicher lustig wenn Leerzeichen im Dateinamen vorkommen (mal davon abgesehen das das Script nicht funktioniert). Egal .. jungs.. *wenn* ihr Scripte schreibt die "Shell-spezifisch" sind, dann schreibt sie fuer eine brauchbare Shell und nicht fuer die Bash.
 
*g* ok dann probier ich mal was ich mit meinen bescheidenen Kentnissen selber hinbekomme. eine andere Frage: In dem Verzeichnis Packages sind eine Menge unterverzeichnisse... in "All" sind alle dateien drin, aber in den anderen verzeichnissen waren nur links drin und beim kopieren auf die FAT-Partition sind die dann zu 0 byte dateien geworden... die brauche ich nicht mehr oder?
 
strcat schrieb:
Wird sicher lustig wenn Leerzeichen im Dateinamen vorkommen (mal davon abgesehen das das Script nicht funktioniert). Egal .. jungs.. *wenn* ihr Scripte schreibt die "Shell-spezifisch" sind, dann schreibt sie fuer eine brauchbare Shell und nicht fuer die Bash.
Sorry, hab jahrelang nur mit Bash gescriptet und mag sie (da ich von Linux komme) recht gern. Aber im Falle *BSD mit csh/tcsh als Standard magst Du recht haben.
Das Script funzt ybrigens, jedenfalls auf meinem bescheidenen Rechner. Wär übrigens lieb, wenn Du den Fehler zum Nachvollziehen auch nennen wyrdest ;)
Mit den Leerzeichen hast du recht, da ist wohl eher so nen Konstrukt besser:
Code:
ls -1d * | while read FILE
do
    sum=$(md5 $i | cut -d= -f2 | tr -d ' ')
    mv $FILE $(grep $sum /tmp/md5sums.tmp | cut -d' ' -f1)
done
Ist aber sowieso nur ne Anregung fyrs Problem und erhebt keinen Anspruch ne Lösung zu sein ..
 
hell_bird schrieb:
Habe ich das richtig verstanden? die erste Zeile muss ich auf einem Rechner ausführen auf dem die Dateinamen noch richtig sind. Da werden dann die md5 summen mit den Dateinamen in die Dateigeschrieben. Und wenn ich dann den zweiten Teil auf dem Rechner mit den verfälschten Dateinamen ausführe wird durch die md5summe bestimmt welcher name zu welcher datei gehört?
Theoretisch und bei mir auch praktisch ja, aber wie gesagt ne bash hast du auf dem rescue-System bzw. der Boot-CD wahrscheinlich nicht ...
hmm muss es mir morgen nochmal genau anschauen ... warum machst du ls -ld ? das -d flag bewirkt doch, dass nicht der inhalt, sondern der Name von einem verzeichnis angezeigt wird....
weil sonst die Unterverzeichnisse bei nem "/bin/ls *" bei mir mit angezeigt werden ...
das "ls -ld" (sprich "minus el-deh") ist ybrigens ein "ls -1d" (sprich "minus eins-deh") ;)
kann man das auch anpassen, dass es auch unterverzeichnisse berücksichtigt? oder wird das unnötig kompliziert?
dafyr dann vielleicht statt des "ls" nen "find" nehmen, also sowas wie "find ./ -type f" oder so ...
sorry bei shellprogrammierung habe ich noch fast keine Ahnung .. bin halt ein windowsuser ;)
na die Begeisterung scheint ja da zu sein, dann mal viel Spass mit csh/tcsh :D
 
Lassen wir mal das Shell-bashing aussen vor.

kazcor schrieb:
Sorry, hab jahrelang nur mit Bash gescriptet und mag sie (da ich von Linux komme) recht gern. Aber im Falle *BSD mit csh/tcsh als Standard magst Du recht haben.
Das Script funzt ybrigens, jedenfalls auf meinem bescheidenen Rechner. Wär übrigens lieb, wenn Du den Fehler zum Nachvollziehen auch nennen wyrdest ;)
Mit den Leerzeichen hast du recht, da ist wohl eher so nen Konstrukt besser:
Code:
ls -1d * | while read FILE
do
    sum=$(md5 $i | cut -d= -f2 | tr -d ' ')
    mv $FILE $(grep $sum /tmp/md5sums.tmp | cut -d' ' -f1)
done
Ist aber sowieso nur ne Anregung fyrs Problem und erhebt keinen Anspruch ne Lösung zu sein ..

Dein Skript hat mehrere Probleme. Zum Einen bennenst du ein- und dieselbe Datei um (=schwerwiegend) und zum Anderen jagst du Verzeichnisse durch den md5 (=unsauber). Woher die Eingabe von i$ herkommen soll ist auch nicht klar, und sonderzeichen faengst du auch nicht ab. ~ laesst gruessen. Das Problem mit Leerzeichen in Dateinamen hast du auch noch (cut!). Mit der zweiten Version ist es also eher verschlimmbessert.

Eine MD5 Referenz hat er ja nicht, weil er keinen Zugriff auf die CD hat. Muss er also erst erstellen und dann rueberkopieren. Kein grosses Problem. Allerdings muss er sich haendisch um die Verzeichnisse kuemmern.

Mein Tipp... Kopiere lieber das Zeug nochmal und verwende beim Kopieren entweder eine der freien DOS-Varianten, oder eine der Single-Floppy Linux Varianten...

Btw... Ich habe die neueren FreeBSD nie von einer DOS-Partition aus erstellt, aber laut Anleitung steht da nur was von MSDOS, nicht FAT32. Daher muesste die Installationsroutine auch mit den 8.3 Namen zurecht kommtn.
 
kazcor schrieb:
Sorry, hab jahrelang nur mit Bash gescriptet und mag sie (da ich von Linux komme) recht gern. Aber im Falle *BSD mit csh/tcsh als Standard magst Du recht haben.

Nein. Standard ist /bin/sh und nicht die (t)csh.

Das Script funzt ybrigens, jedenfalls auf meinem bescheidenen Rechner.

Das halte ich fuer ein Geruecht.

Wär übrigens lieb, wenn Du den Fehler zum Nachvollziehen auch nennen wyrdest ;)

$ touch "foo bar"

Mit den Leerzeichen hast du recht, da ist wohl eher so nen Konstrukt besser:
Code:
ls -1d * | while read FILE
do
    sum=$(md5 $i | cut -d= -f2 | tr -d ' ')
    mv $FILE $(grep $sum /tmp/md5sums.tmp | cut -d' ' -f1)
done
Ist aber sowieso nur ne Anregung fyrs Problem und erhebt keinen Anspruch ne Lösung zu sein ..[/QUOTE]

Nein. Damit wird es alles andere als "besser".
 
es hat funktionert !!! :D
vielen dank !! jetzt muss ich nicht hunderte von Dateien umbenennen :)

Eine MD5 Referenz hat er ja nicht, weil er keinen Zugriff auf die CD hat. Muss er also erst erstellen und dann rueberkopieren. Kein grosses Problem. Allerdings muss er sich haendisch um die Verzeichnisse kuemmern.
die cd war auf einem anderen rechner verfügbar mit einer diskette habe ich das auf den Laptop bekommen... und wegen der verzeichnisse: von denen hatte keins einen Namen länger als 8
Mein Tipp... Kopiere lieber das Zeug nochmal und verwende beim Kopieren entweder eine der freien DOS-Varianten, oder eine der Single-Floppy Linux Varianten...
ich hatte es verschoben... ich weiß nicht sehr intelligent
Btw... Ich habe die neueren FreeBSD nie von einer DOS-Partition aus erstellt, aber laut Anleitung steht da nur was von MSDOS, nicht FAT32. Daher muesste die Installationsroutine auch mit den 8.3 Namen zurecht kommtn.
scheint nicht der fall zu sein .... naja Freebsd nennt beim mounten ja auch alles FAT (12,16,32) "-t msdosfs"
 
Zuletzt bearbeitet:
axo .. naja die verzeichnisse sind sowieso sinnlos. Die Dateien darin sind nur links auf die in dem Verzeichnis "All" und wenn man die CD auf die Festplatte kopiert werden sie zu 0 byte dateien. Sysinstall liest die daten aus dem verzeichnis "All"
 
Zurück
Oben