
Tengo docenas de archivos como:
title.mkv]-[72+167] - "" yEnc 637005001 (1+889)
Me gustaría eliminar todo lo que está después de ".mkv"
Intenté buscar algunas expresiones regulares que me ayudarían, pero no entiendo cómo usarlas.
¿Alguien podría ayudarme?
Respuesta1
Nota sobre rename
, prename
etc. ver:
- ¿Por qué la utilidad de cambio de nombre en Debian/Ubuntu es diferente a la de otras distribuciones, como CentOS?
- ¿Qué pasa con todos los cambios de nombre: prenombre, cambio de nombre, cambio de nombre de archivo?
En esta respuesta se utiliza la variante de Perl, no la de util-linux. Como en no:
$ rename --version
rename from util-linux 2.31.1
pero:
$ rename --version
/usr/bin/rename using File::Rename version 0.20
o similar.
Con cambio de nombre en Perl:
rename 's/\.mkv.*/.mkv/s' ./*.mkv*
Utilice la -n
opción primero para asegurarse de que haga lo que desea.
rename -n 's/\.mkv.*/.mkv/s' ./*.mkv*
En breve:
s/\.mkv.*/.mkv/s
es:
substitute/<THIS>/<WITH THIS>/s
\.mkv.*
coincide con un punto literal, \.
luego la cadena mkv
y finalmente cualquier carácter (incluido \n
el que necesita la s
bandera) cero o más veces .*
.
El resultado es reemplazar .mkv<anything>
con .mkv
.
Hay herramientas para ayudar con la lectura y la construcción de expresiones, comohttps://regex101.com/
Respuesta2
en bash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
Respuesta3
Conzsh
'szmv
:
autoload zmv
zmv -v '(*.mkv)*' '$1'
Elimina la pieza después de lamás a la derechaaparición de .mkv
en el nombre del archivo (cambia el nombre foo.mkv-bar.mkv-whatever
a foo.mkv-bar.mkv
).
Para elmás a la izquierdaocurrencia (para cambiar el nombre de ese archivo foo.mkv
), puede reemplazarlo *.mkv
con *.mkv~*.mkv?*
el que coincide con una cadena que termina en .mkv
pero que tampoco contiene .mkv
seguido de al menos un carácter usando ~
"excepto"operador global.
Respuesta4
En una fiesta de script
#!/bin/bash
for i in *.mkv*
do
j=$(echo "$i" | sed -e 's/\.mkv.*$/.mkv/')
mv -- "$i" "$j"
done