Stapelweises Umbenennen von Dateinamen, um den Teil nach dem letzten "-" zu entfernen und dabei die Erweiterung zu ignorieren

Stapelweises Umbenennen von Dateinamen, um den Teil nach dem letzten "-" zu entfernen und dabei die Erweiterung zu ignorieren

Ich möchte Dateien in einem bestimmten Ordner stapelweise umbenennen und dabei den Teil nach dem letzten entfernen -, und zwar auf folgende Weise.

  • hello world - Mr SheepZuhello world
  • super user - question on super user.docxZusuper user.docx
  • abc - def - ghi jkl.pdfZuabc - def.pdf

Ich würde eine Befehlszeilenlösung bevorzugen, aber andere Optionen sind auch in Ordnung.

Antwort1

Um die letzte -Verwendung ${f% - *}wie in Bash zu entfernen${var%Pattern} das kürzeste Muster am Ende der Variable entfernt. Weitere Informationen finden Sie unterParametersubstitutionDas Ergebnis ist wie folgt

for f in path/*
do
    if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi
    echo mv "$f" "${f% - *}$ext"
done

Nachdem Sie überprüft haben, dass die neuen Dateinamen korrekt sind, können Sie echomit der eigentlichen Umbenennung beginnen. Demo:

$ for f in "hello world - Mr Sheep" "super user - question on super user.docx" "abc - def - ghi jkl.pdf"; do if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi; echo mv "'$f'" "'${f% - *}$ext'";  done
mv 'hello world - Mr Sheep' 'hello world'
mv 'super user - question on super user.docx' 'super user.docx'
mv 'abc - def - ghi jkl.pdf' 'abc - def.pdf'

verwandte Informationen