Dateinamen kürzen

Hi,
ich möchte Dateinamen mit unbekannter Länge auf maximal 8 Zeichen verkürzen; natürlich per script (bash):
01234567890123456.ext -> 01234567.ext

Wie mache ich das? Bestimmt mit sed… Oder mit cut?
ls | cut -c -8
Aber wie bekomme ich nur die ersten x-Zeichen des Dateinamens?

J~

Hallo,

da ich unten ja gerade auf whitespaces in Dateinamen rumgehackt habe setze ich hier ganz keck voraus, dass es die nicht gibt.

ich möchte Dateinamen mit unbekannter Länge auf maximal 8
Zeichen verkürzen; natürlich per script (bash):
01234567890123456.ext -> 01234567.ext

Vielleicht ungefaehr:

for file in \*
do
 mv "$file" "`echo $file |sed -re 's/^([^.]{,8})[^.]*\.(.{,3}).*$/\1.\2/'`"
done

Achtung: die Dateiendung (auch, wenn ich natuerlich nicht die geringste Ahnung habe, was das ist und wozu ein Betriebssystem so einen Quatsch braucht) darf hier beliebige Zeichen enthalten, also auch Punkt. Falls das unguenstig ist, einfach die Zeichenklasse . genauer spezifizieren. (Das Finden des richtigen . ist dem geneigten Leser ueberlassen.)

Wie mache ich das? Bestimmt mit sed… Oder mit cut?

Naja, man koennte bestimmt irgendwo noch ein cut unterbringen… muss aber nicht, zumal es keinen „Useless Use of cut“ award gibt. Viel eleganter faende ich es uebrigens, die Dateien einfach auf so auf ein FAT-Dateisystem zu kopieren.

Gruss vom Frank.

( sed filename change length Länge kürzen ändern )
Hi Frank,

ich danke dir sehr, grade auch weil ich wie üblich von dem sed-Ausdruck rein garnix kapiere :smile:)

j~@darkstar:/tmp$ echo "01234567890123456789.ext" |sed -re 's/^([^.]{,8})[^.]\*\.(.{,3}).\*$/\1.\2/'
01234567.ext

liefert damit schon mal ein brauchbares Ergebnis für mein Script :smile: Dateinamen ohne Extension (also ECHTE Dateinamen :wink: werden zwar nicht gekürzt, aber ich will nicht nach den Sternen greifen.

Viel eleganter faende ich es uebrigens,
die Dateien einfach auf so auf ein FAT-Dateisystem zu
kopieren.

Wobei ich min 2 Probleme mehr hätte:
1.habe ich kein FAT16-Partition
2.war 8.3 nur ein Beispiel für beliebige, andere Werte für x und y :smile:

Dank und Grüße,
J~

Selber Hi,

„Der Frank“ hat unten ja schon eine nette Lösung gepostet (und ich schliesse mich seiner Warnung vor Leerzeichen in Filenamen an). Mir fällt spontan auch eine Lösung ein, die nur innherhalb der Shell / bash funktioniert (kein externes sed, kein ‚useless use of cut award‘):

fname\_old='01234567890123456.ext'

ext=${fname\_old##\*.} # 'Extension'
fname\_new=${fname\_old%.\*} # alles bis zum letzten Punkt
 # (ausschliesslich)
fname\_new=${fname\_new:0:8} # ab Pos 0, 8 Zeichen Laenge
fname\_new="${fname\_new}.${ext}" # und wieder zusammenbauen...

gruss
bernhard

Viel eleganter faende ich es uebrigens,
die Dateien einfach auf so auf ein FAT-Dateisystem zu
kopieren.

You made my day.