Eliminar parte del nombre después de la expresión regular

Eliminar parte del nombre después de la expresión regular

Tengo varios archivos de video que usan un esquema de nombres como

algunas-palabras-SxxExx.extensión

cual es mi preferencia. Desafortunadamente tengo muchos archivos en este formato.

algunas-palabras-SxxExx-palabras-quiero-eliminar.extensión

Necesito eliminar automáticamente eliminar todo después de la parte Exx.

Respuesta1

Suponiendo que los x's son marcadores de posición, zmvdebería poder hacerlo con 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

También puedes usar '(*S[0-9][0-9]E[0-9][0-9])*.ext'para hacer coincidir dígitos en lugar de x.

O si quieres usar 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

o con el renamecomando Perl (que aparentemente ahora se llama file-renameen Debian):

file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext

(Elimine el echofrente mvy las -nbanderas zmvy file-renamehaga los cambios de nombre. mv -nPor otro lado, le dice que no sobrescriba los archivos existentes, esto funciona al menos en GNU mv).

Respuesta2

Qué tal si

$ echo 'some-words-SxxExx-words-I-want-to-remove.extension' | sed 's/\(S..E..\)[^.]*/\1/'
some-words-SxxExx.extension

(aunque espero que un aficionado a zsh pueda hacerlo de forma más sencilla utilizando la sustitución de shell).

información relacionada