wiki:linux/bash/Bashskript zum Umbenennen von Dateien

Bashskript zum Umbenennen von Dateien, Replace extension of several files


Gründe gibt es ja viele, Dateien mit einer fortlaufenden Nummerierung versehen zu müssen.
Wege, das zu tun, auch.

Hier ist einer, den ich beim Erstellen einer ePub verwende:

#!/bin/bash

counter='0'
step='1'
file_type='jpeg'
prefix='file'
suffix='.jpeg'

mkdir ./tmp
for file in *$file_type; do
  new_file=$(printf $prefix'%04d'$suffix $counter)
  mv $file ./tmp/$new_file
  echo $file' > '$new_file
  counter=$(($counter+$step))
done
mv ./tmp/*$file_type ./
rmdir ./tmp

Hier die Erklärung der einzelnen Skriptzeilen:

#!/bin/bash Sogenannte shebang, eingeleitet durch das '#!'. Das darauf folgende '/bin/bash' wird als Kommando ausgeführt und das Skript selbst als Argument übergeben.
mkdir ./tmp Erstellt ein Temporär-Verzeichnis, eine Art vorläufige Ablage.
counter='0' Der Zähler, der an jeden Dateinamen hinten angehängt wird.
Gestartet wird mit Nummer 0. Möchtest Du die Zählung mit einer anderen Nummer beginnen, musst Du hier natürlich die entsprechende Zahl eintragen.
for file in *$file_type Beginn einer Schleife über alle Dateinamen mit der Endung aus der Variablen file_type. In diesem Fall also alle Dateien, die mit 'jpeg' enden.
Mit jedem Schleifendurchlauf wird Dateiname für Dateiname an die Variable 'file' verwiesen.
do Beginn eines Befehlsblocks
new_file=$(printf $prefix'%04d'$suffix $counter) Hier legen wir eine Variable new_file, die den Namen zur Umbenennung enthält, an. Der Befehl printf setzt aus dem Inhalt von prefix + 4stellig formatierter counter + suffix den neuen Dateinamen zusammen. In unserem Fall also
'file'[....]'.jpeg'.
mv $file ./tmp/$new_file Ausführung des Befehls 'mv' (Datei verschieben):
Die Datei, die im jeweiligen Schleifendurchlauf eingelesen und an die Variable 'file' verwiesen wurde, wird in das anfangs erstellte Temporär-Verzeichnis verschoben und gleichzeitig zu new_file umbenannt.
echo $file' > '$new_file Ausgabe zur Information.
counter=$(($counter+$step)) Wir erhöhen counter um den Wert aus step, hier also jeweils um 1.
done Ende des Befehlsblocks und verlassen der for-Schleife
mv ./tmp/*$file_type ./ Alle Dateien, die wir mit dem mv-Befehl unter neuem Namen ins Temporär-Verzeichnis verschoben haben, holen wir nun, da alle Dateien abgearbeitet sind, wieder zurück.
rmdir ./tmp Das Temporär-Verzeichnis 'tmp' kann somit wieder entfernt werden.

Dieses Skript ließe sich durch Übergabe von Parametern noch wunderbar verfeinern.
Nachdem mich Bash-Programmierung aber immer wieder an den Rand des Wahnsinns treibt, habe ich mir diese Tortur erspart und drehe diverse Stellschrauben nach Bedarf direkt im Skript...

Last modified 4 years ago Last modified on Dec 11, 2014, 11:08:55 AM