GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo eliminar los caracteres finales en los nombres de archivo en Bash?

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).


Linux
  1. ¿Cómo depurar un script Bash?

  2. ¿Cómo cambiar un nombre de archivo que contiene caracteres?

  3. ¿Cómo detectar Bash> =4.0?

  4. ¿Cómo permitir solo ciertos caracteres en una variable Bash?

  5. ¿Cómo sé el nombre del archivo de script en un script Bash?

Cómo escribir un bucle en Bash

Cómo comentar en Bash

Cómo quitar (^M) caracteres de un archivo en Linux

Cómo quitar espacios de los nombres de archivo en Linux

Cómo quitar todos los caracteres de espacio en blanco de un archivo de texto

Cómo ejecutar un script Bash