Dateinamen kürzen/ändern

J

JCB

Mitglied
Hallo,

kann mir jemand bei einer Zeile helfen? Ich versuche folgendes:
Lösche die ersten 8 Zeichen ersetze die letzten 3 Zeichen in txt.

Leider muss ich mit den Zahlen hantieren, da die ersten 8 und die letzen 3 immer unterschiedlich Zahlen und Buchstaben enthalten.

ls dbgerman.* |while read datei; do #alle Dateien fangen mit dbgerman. an
temp=sed -e 's/.\{4\}$//'

mv $datei $temp .txt
done


also die letzten 3 Buchstaben hab ich schon mal, fehlt nur noch der Anfang. Irgendeinen Tip??

Danke,

schon im voraus.

JCB
 
Code:
sed -e 's/^.\{8\}//'
sed -e 's/.\{3\}$/txt/'

oder in einer Zeile

Code:
sed -e 's/^.\{8\}//' -e 's/.\{3\}$/txt/'

Gruss, Phorus
 
Zuletzt bearbeitet:
Danke Phorus. Das ging ja schnell. Ich werd das gleich mal einbauen.

Reprt kommt,

Danke,

JCB
 
Phorus schrieb:
Code:
sed -e 's/^.\{8\}//'
sed -e 's/.\{3\}$/txt/'

oder in einer Zeile

Code:
sed -e 's/^.\{8\}//' -e 's/.\{3\}$/txt/'

Gruss, Phorus
Oder so:
sed -e 's/^.\{8\}\(.*\).\{4\}$/\1_neu/'

Gruß Wolfgang
 
Sorry, ich muss da noch mal bohren. Wieso geht das nicht??
Code:
#!/bin/sh

#Verzeichnis wechseln
cd /pub/dnb/ftp/gb/fromgb

#jede datei umbenennen und packen


ls dbgerman.* | while read datei; do
temp="`sed -e 's/^.\{17\}\(.*\).\{4\}$/\1.txt/'`"

mv "$datei" "$temp"
done

nur die erste Datei wird umbenannt, und dann bekommt sie alle Namen der Dateien getrennt mit einem Zeilenvorschub??

Ich hab die Zeile nochmal angepasst 17 Zeichen müssen gelöscht werden. Hab mal man sed aufgerufen, aber ganz schlau werd ich aus der Zeile nicht..

Wenn ihr noch einen Tipp habt??

Danke
 
Hallo
Vorschlag:
Ändere mal das hier:
Code:
ls -A dbgerman.* | while read datei; do
temp="$(echo $datei|sed -e 's/^.\{17\}\(.*\).\{4\}$/\1.txt/')"
...
Zum sed:
/^.\{17\} --am Anfang 17 Zeichen
\(.*\) -- gefolgt von beliebig vielen Zeichen (In \1 Speichern)
.\{4\}$/ --vier Zeichen am Ende
/\1 --- Ersetze durch das was in Klammern steht =rot
txt/ und txt
Das wird in temp gespeichert.

Gruß Wolfgang
 
Zuletzt bearbeitet:
Hi!

Probier doch das, ist schön übersichtlich :)

for R in dbgerman*;do RT=${R:8};mv $R ${RT%???}txt;done
 
Hallo,

vielen dank für eure Hilfe. Hat beides geklappt. Ich habe dann doch entschieden daß M$Access, nicht die ganze Arbeit macht sonder lieber Linux alles in eine Datei zusammenfasst und dann Access alles in eins reinlutscht.

Danke für eure Hilfe.

Spitzen Forum hier :)

JCB
 

Ähnliche Themen

Wie finde ich Leerzeichen im dateinamen

bash: Fehlermeldung und Werte in Array sortieren?

Umbenennung Dateinamen

Gleicher Befehl über Script -> Fehler?

Dateinamen kürzen

Zurück
Oben