(Umsetzung unter Linux/bash)
Problem:
Eine längere Liste mit Dateinamen der Art Kategorie1_Kategorie2_Kategorie3_Dateiname.txt soll jeweils in Dateiname.txt umbenannt werden.
Eine manuelle Umsetzung würde Stunden brauchen.
Lösung:
Man lässt eine kleine for-Schleife drüber laufen welche die Kategorien mittels pattern matching entfernt.
Die bash bringt die entsprechende Funktionalität schon mit, so dass es recht simpel umzusetzen ist:
for i in ls; do mv $i ${i##*_};done
Erklärung:
for i in ls;
# Für jedes Vorkommen i in der Ausgabe des Kommandos ls,
do mv $i ${i##*_};
# umbenennen des ursprünglichen Dateinamens $i in eine Variante bei der alle Segmente in i bis zum letzten “_” von links entfernt sind
done
# Abschluss der for-Schleife
Beispiele:
${i##*_}
alle Bestandteile bis incl. dem letzten _ von links werden entfernt: Dateiname.txt
${i#*_}
alle Bestandteile bis incl. dem ersten _ von links werden entfernt: Kategorie2_Kategorie3_Dateiname.txt
${i%%_*}
alle Bestandteile bis incl. dem letzten _ von rechts werden entfernt: Kategorie1
${i%.*}
alle Bestandteile bis incl. dem ersten . von rechts werden entfernt: Kategorie1_Kategorie2_Kategorie3_Dateiname
Mehr Informationen dazu findet man im bash manual bash manual.