
Ich habe jede Menge JPG-Dateien in einem Ordner, die nicht alphabetische Zeichen wie ! , ( ) ^ & .
und mehr enthalten.
Ich muss die Dateien umbenennen, sodass alles, was nicht vorhanden ist, A-Z a-z 0-9
durch nichts ersetzt wird. Außerdem sollten Leerzeichen ersetzt werden, sodass -
die Dateien auch mit .mp4$$$.jpg enden. Dieser Teil muss intakt bleiben.
Wenn die Datei beispielsweise heißt
ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg
Der Dateiname sollte geändert werden in
ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg
Antwort1
Mit Bash könnten Sie Folgendes tun:
for f in *.jpg
do
if [[ $f =~ ^(.*)(\.mp[[:digit:]]+\.jpg) ]]
then
prefix=${BASH_REMATCH[1]}
suffix=${BASH_REMATCH[2]}
prefix=${prefix//[^[:alnum:] ]/}
prefix=${prefix// /-}
echo mv -- "$f" "${prefix}${suffix}"
fi
done
Dies durchläuft die *.jpg
Dateien und versucht, jeden Dateinamen mit dem Muster abzugleichen: (irgendetwas) gefolgt von .mp
(einer oder mehreren Ziffern) .jpg
. Wenn der Dateiname übereinstimmt, trennen wir ihn zum Umbenennen. Das Suffix enthält Punkte, daher speichern wir es separat, um alle Punkte im Präfix zu entfernen. Nachdem wir alles entfernt haben, was keine alphanumerischen Zeichen oder Leerzeichen sind, ersetzen wir alle Leerzeichen durch Bindestriche. Der Dateiname wird dann für den mv
Befehl rekonstruiert; entfernen Sie, echo
wenn die Ergebnisse korrekt aussehen.
Wenn Sie die Bindestriche in den ursprünglichen Dateinamen lieber beibehalten möchten, tauschen Sie die letzten beiden prefix
Zuweisungen gegen diese aus:
prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}