Skip to content

🧠 Skript zur Umbenennung von Dateien mit Sonderzeichen für Paperless-Import

🔍 Zweck

Dieses Bash-Skript wird verwendet, um Dateinamen im aktuellen Verzeichnisbaum rekursiv zu durchsuchen und bestimmte Unicode-Zeichen (vor allem Umlaute und Sonderzeichen) durch definierte Ersatzzeichen zu ersetzen. Dies ist insbesondere hilfreich beim Import von Dateien in Paperless-ngx (Docker-Version), da problematische Zeichen im Dateinamen zu Fehlern oder fehlerhaftem Verhalten führen können.

📦 Anwendungsfall

Beim Import von Dokumenten nach Paperless-ngx über ein Docker-Volume kam es zu Problemen mit Unicode-Zeichen (z. B. Umlaute oder typografische Sonderzeichen). Das Skript ersetzt diese Zeichen durch kompatible Platzhalter oder entfernt sie, um eine reibungslose Verarbeitung sicherzustellen.

🧾 Skriptinhalt

#!/bin/bash

shopt -s globstar nullglob

# Mapping
  ["#U00e4"]="ä"
  ["#U00c4"]="Ä"
  ["#U00f6"]="ö"
  ["#U00d6"]="Ö"
  ["#U00fc"]="ü"
  ["#U00dc"]="Ü"
  ["#U00df"]="ß"
  ["#U2014"]="—"  # langer Gedankenstrich
  ["#U2013"]="–"  # kurzer Gedankenstrich
  ["#U00e9"]="é"
  ["#U00e0"]="à"
  ["#U00ab"]="«"  # französisches Anführungszeichen links
  ["#U00bb"]="»"  # französisches Anführungszeichen rechts
)

for file in **/*; do
  [[ -f "$file" || -d "$file" ]] || continue

  newname="$file"
  for key in "${!map[@]}"; do
    newname="${newname//${key}/${map[$key]}}"
  done

  if [[ "$newname" != "$file" ]]; then
    echo "Renaming: '$file' -> '$newname'"
    mv -v -- "$file" "$newname"
  fi
done

⚠️ Hinweise

  • Das Skript verändert Dateinamen dauerhaft. Vor der Ausführung ggf. ein Backup machen.
  • Es wird nicht geprüft, ob das Ziel (`$newname`) bereits existiert.
  • Das Skript ist nicht Unicode-aware im klassischen Sinne – es ersetzt bereits umcodierte Zeichen (wie `#U00e4`), nicht echte UTF-8-Zeichen. D. h. es wirkt nach einer fehlerhaften Kodierung (z. B. beim Export oder durch inkompatible Tools).

🧪 Beispiel

Original:  Rechnung_#U00e4pfel_und_#U00f6l.pdf
Neuer Name: Rechnung_äpfel_und_öl.pdf

✅ Status

Einsatzbereit für die Dateivorbereitung beim Import in Paperless-ngx via Docker.