Teil des Namens nach regulärem Ausdruck entfernen

Teil des Namens nach regulärem Ausdruck entfernen

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, zmvsollte 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- renameBefehl (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 mvund die -nFlags von zmvund , file-renameum die Umbenennungen tatsächlich durchzuführen. mv -nAndererseits 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).

verwandte Informationen