
Ich habe eine Reihe von Videodateien mit einem Benennungsschema wie
einige-Wörter-SxxExx.Erweiterung
das ist meine Präferenz. Leider habe ich viele Dateien in diesem Format
einige Wörter-SxxExx-Wörter-die-ich-entfernen-möchte.Erweiterung
Ich muss alles nach dem Exx-Teil automatisch entfernen.
Antwort1
Vorausgesetzt, die x
's sind Platzhalter, zmv
sollte das möglich sein mit
zmv -nv '(*S??E??)*.ext' '$1.ext'
% touch foo-S01E02-garbage.ext bar-S07E17-moregarbage.ext
% zmv -nv '(*S??E??)*.ext' '$1.ext'
mv -- bar-S07E17-moregarbage.ext bar-S07E17.ext
mv -- foo-S01E02-garbage.ext foo-S01E02.ext
Sie können '(*S[0-9][0-9]E[0-9][0-9])*.ext'
anstelle von auch nur Ziffern verwenden x
.
Oder wenn Sie Folgendes verwenden möchten sed
:
for f in *.ext; do
echo mv -n "$f" "$(echo "$f" | sed -e 's/\(S[0-9][0-9]E[0-9][0-9]\).*\.ext/\1.ext/')"
done
oder mit dem Perl- rename
Befehl (der in Debian jetzt offenbar so heißt file-rename
):
file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext
(Entfernen Sie das echo
„von“ vor mv
und die -n
Flags von zmv
und , file-rename
um die Umbenennungen tatsächlich durchzuführen. mv -n
Andererseits weist es an, vorhandene Dateien nicht zu überschreiben, was zumindest in GNU funktioniert mv
.)
Antwort2
Wie wäre es mit
$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension
(obwohl ich erwarte, dass ein Zsh-Fan dies mithilfe einer Shell-Substitution einfacher erledigen könnte).