🧠 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.