In der Shell könnte man einfach Folgendes tun:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
Die Shell kann eine Liste der Dateinamen mit nur einem normalen Glob und ${var%pattern}
erzeugen entfernt das (kürzeste) passende Muster am Ende der Zeichenfolge in der Variablen var
. Da die Enderweiterung immer .avi
ist , ich habe es einfach mit dem Muster entfernt und wieder hinzugefügt. Mit den Anführungszeichen sollte dies auch mit Dateinamen funktionieren, die Leerzeichen enthalten, wie Fancy Name for a Show.s01e01]Asdf.avi
Dadurch werden die Dateien umbenannt. Sie benötigen das \w*, um eine beliebige Anzahl alphanumerischer Zeichen zu kennzeichnen.
rename 's/\]\w*//' *
Referenz:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
Das ist alles andere als unpraktisch - die anderen Antworten sind viel schneller und kürzer - aber ...
Sie können PowerShell verwenden! Microsoft hat es kürzlich Open-Source gemacht und es plattformübergreifend gemacht. Downloads und Installationsanweisungen für Ihr Betriebssystem finden Sie im Abschnitt „Get PowerShell“.
Sobald Sie es installiert haben, können Sie dieses kurze Skript verwenden:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
Grundsätzlich geht es durch jedes Objekt im aktuellen Verzeichnis, das eine Datei ist, die *]*.avi
entspricht , erhält den Teil vor der Klammer, heftet .avi
an wieder darauf und weist ihm diesen als neuen Namen zu.
Um es direkt von Bash aus auszuführen, verwenden Sie diesen semi-golfed Einzeiler:
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
Zitieren Sie mit freundlicher Genehmigung dieser Stack Overflow-Antwort.
(Getestet in Bash unter Ubuntu unter Windows. Es gibt wahrscheinlich einen viel kürzeren Weg, dies mit PowerShell zu tun, aber ich wollte etwas zeigen, das für Leute verständlich ist, die keine regulären Ausdrücke kennen.)