En shell, uno podría hacer simplemente:
for x in *]*.avi ; do
mv -i "$x" "${x%]*.avi}.avi"
done
El shell puede producir una lista de los nombres de archivo con solo un glob normal y ${var%pattern}
elimina el patrón coincidente (más corto) del final de la cadena en la variable var
. Dado que la extensión final siempre es .avi
, simplemente lo eliminé con el patrón y lo volví a agregar. Con las comillas, esto también debería funcionar con nombres de archivo que contengan espacios, como Fancy Name for a Show.s01e01]Asdf.avi
Esto cambiará el nombre de los archivos. Necesita \w* para indicar cualquier número de caracteres alfanuméricos.
rename 's/\]\w*//' *
Referencia:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
Esto es todo tipo de poco práctico - las otras respuestas son mucho más rápidas y cortas - pero...
¡Puedes usar PowerShell! Microsoft lo abrió recientemente y lo hizo multiplataforma. Para descargar e instrucciones de instalación para su sistema operativo, consulte la sección "Obtener PowerShell".
Una vez que lo haya instalado, puede usar este breve script:
Get-ChildItem -File '*]*.avi' | ForEach-Object {
Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}
Básicamente, pasa por cada objeto en el directorio actual que es un archivo que coincide con *]*.avi
, obtiene la parte antes del corchete, clava .avi
vuelve a él y lo asigna como el nuevo nombre.
Para ejecutarlo directamente desde Bash, use esta frase semi-golfada:
powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'
Cita que se escapa por cortesía de esta respuesta de desbordamiento de pila.
(Probado en Bash en Ubuntu en Windows. Probablemente haya una forma mucho más corta de hacerlo con PowerShell, pero quería mostrar algo que sea comprensible para las personas que no conocen las expresiones regulares).