Tengo un montón de archivos multimedia como los siguientes:
tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
Me gustaría cambiarles el nombre a
tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
Intenté usar renombrar, pero evidentemente no obtengo la sintaxis correcta porque falla.
krename
es encantador. Tiene todo tipo de opciones poderosas y le muestra lo que hará antes de que realmente lo haga. Incluso podría usarlo para probar patrones que podría usar en bash más tarde.Respuestas:
Esto cambiará el nombre de los archivos. Necesita \ w * para indicar cualquier número de caracteres alfanuméricos.
Referencia: http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards
fuente
rename
utilidad Perl , no la que tiene el mismo nombre de util-linux . Ver aquí y aquíEn shell, uno podría hacer simplemente:
El shell puede producir una lista de los nombres de archivo con solo un globo regular, y
${var%pattern}
elimina el patrón de coincidencia (más corto) desde el final de la cadena en variablevar
. Como la extensión final es siempre.avi
, simplemente la eliminé con el patrón y la agregué nuevamente. Con las comillas, esto también debería funcionar con nombres de archivos que contienen espacios, comoFancy Name for a Show.s01e01]Asdf.avi
fuente
${x/]*([^.])}
debería hacer, elimina un paréntesis y cualquier número de puntos no. (aunque falla si hay otros corchetes o puntos, ya que no está bloqueado hasta el final de la cadena)${x/]*.avi}
y simplemente agregué un tipo.avi
como tú. Pero tampoco estaba satisfecho con cómo se romperían los espacios en el nombre(`find . -name '*]*.avi'`)
. Me complace proporcionar un método de comando unix estándar limitado, ya que cambiar el nombre no lo es, pero esto saca a la mía del agua.Esto no es práctico, las otras respuestas son mucho más rápidas y cortas, pero ...
¡Puedes usar PowerShell! Microsoft lo ha abierto recientemente y lo hizo multiplataforma. Para obtener descargas e instrucciones de instalación para su sistema operativo, consulte la sección "Obtener PowerShell" .
Una vez que lo instales, puedes usar este breve script:
Básicamente, pasa por cada objeto en el directorio actual que coincide con un archivo
*]*.avi
, obtiene la parte antes del corchete, lo.avi
vuelve a colocar y lo asigna como el nuevo nombre.Para ejecutarlo directamente desde Bash, use este one-liner semi-golfizado:
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).
fuente
Debian tiene un paquete llamado mmv que también podría estar disponible en otras distribuciones, y si no es así, debería ser lo suficientemente fácil de compilar desde la fuente. Te permite escribir esto:
Puede leer la página de manual de Ubuntu para este comando para obtener más detalles.
fuente
Esto buscará el patrón y reemplazará el texto usando sed.
fuente