Benennen Sie nicht alphabetische und numerische Zeichen in Dateien mit nichts um

Benennen Sie nicht alphabetische und numerische Zeichen in Dateien mit nichts um

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-9durch 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 *.jpgDateien 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 mvBefehl rekonstruiert; entfernen Sie, echowenn die Ergebnisse korrekt aussehen.

Wenn Sie die Bindestriche in den ursprünglichen Dateinamen lieber beibehalten möchten, tauschen Sie die letzten beiden prefixZuweisungen gegen diese aus:

prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}

verwandte Informationen