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

Umbenennen einer Datei

Hallo,

ich habe mir ein Skript geschrieben, das verschiedene Aenderungen an einer Datei vonimmt. Mit jedem Zwischenspeichern wird aber der Dateiname durch zusaetzliche Anhaenge verlaengert. Das Skript arbeitet mehrere Dateien nacheinander ab.

Ich wuerde nun gerne der sehr langen Dateinamen am Ende wieder etwas einkuerzen. Der Dateiname besteht aus mehreren Komponenten, die teilweise gleich bleiben und teilweise veraenderlich sind:

ABC-1000-500-def.text.text.text

Der resultierende Dateiname soll dann wie folgt aussehen: ABC-1000-500-def.dat

"ABC" und "def" sind dabei bei allen Dateien gleich. Die Zahlen "1000" und "500" variieren je nach Datei, sollten aber im neuen Dateinamen vorkommen, da sie die Datei gewissermassen identifizieren. Ich hab leider keine Idee, wie ich die veraenderlichen Teile aus dem Namen auslesen kann und wie ich sie dann an den neuen Dateinamen uebergeben kann.

Danke schonmal

Steffi
 
A

Anonymous

Gast
Wenn du noch im Überblick hast was du während der Bearbeitung angehängt hast, kannst du dieses mit Hilfe von "basename" auch wieder abschneiden bzw ersetzen.

Code:
ALT="ABC-1000-500-def.text.text.text"
NEU=$(basename "$ALT" ".text.text.text").dat
echo $NEU
Der alte Path wird dabei auch abgeschnitten, und nur der neue Dateiname bleibt erhalten, ansonsten könnte
Code:
ALT="/PATH/ZUR/DATEI/ABC-1000-500-def.text.text.text"
NEU=$(dirname "$ALT")/$(basename "$ALT" ".text.text.text").dat
echo $NEU
man den Path auch beibehalten wenn man es benötigen sollte.

Marce schrieb:
Ansonsten - Stringzerlegung, RegEx, ...
geht natürlich auch, aber auf Spatzen muss man nicht immer auch mit Kanonen schießen.



robi
 
Hi,

so könnte man es machen.

Code:
for x in `ls *text.text.text`
do
  neu=`echo $x | sed "s/text.text.text/dat/g"`
  mv $x $neu
done
aber erst testen!!!! Ich habe es jetzt ohne Test schnell aus dem Kopf geschrieben.

Gruß
Georg
 
Oben