
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, zmv
deberí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 rename
comando Perl (que aparentemente ahora se llama file-rename
en Debian):
file-rename -n -v 's/(S[0-9]{2}E[0-9]{2}).*\.ext/$1.ext/' *.ext
(Elimine el echo
frente mv
y las -n
banderas zmv
y file-rename
haga los cambios de nombre. mv -n
Por 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).