5 votos

Cómo cambiar el nombre de todos los archivos en una carpeta

Tengo una carpeta que contiene muchos archivos nombrados con la misma estructura:

 file.number1.2010.720p.otherinfo.mp4
file.number2.1990.720p.otherinfo.mp4
....
 

Me gustaría eliminar toda la secuencia:

 YEAR.720p.otherinfo
 

Entonces el nombre será:

 file.number1.mp4
file.number2.mp4
....
 

Y finalmente me gustaría eliminar todos los puntos (.) Excepto el que está al final (.mp4)

¿Qué comandos debo usar para crear tal script?

4voto

Raffa Puntos 11

Este va a hacer el trabajo:

En primer lugar: Instale rename ejecutando el siguiente comando en la terminal:

sudo apt install rename

En segundo lugar: En la terminal,cd al directorio que contiene los archivos.

Por último: el nombre de los archivos en el formato deseado, ejecute el siguiente comando en la terminal:

rename 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *

Hecho


Aviso:

Para ver cómo la rename comando funcionará en sus archivos, pero sin realmente cambiar el nombre de ellos ( solo impresión de que la salida de la terminal ), puede añadir la opción -n después de ella. Así:

rename -n 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *

Explicación de lo solicitado por Hamza:

Parte # 1:

's/ORIGINAL/NEW/'

Los sustitutos de la ORIGINAL cadena de caracteres con el NEW cadena.

Para ver cómo funciona tan simple como se pone:

  • Por favor ejecutar en la terminal rename -n 's/file.number1.2010.720p.otherinfo.mp4/NEW.mp4/' *
  • Suponiendo que se tiene un archivo con el nombre file.number1.2010.720p.otherinfo.mp4 en el directorio actual.
  • La salida sería rename(file.number1.2010.720p.otherinfo.mp4, NEW.mp4)

Parte # 2:

^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$

Comienza al principio de la cadena ^ y, a continuación, coincide con uno o más caracteres/s ( cualquier personaje ) (.+) antes del punto, \.

Este grupo se coloca en la variable $1 y repite cuatro veces más ( cinco en total ) cada grupo se coloca en una variable ( $2, $3, $4, $5 ) hasta .mp4 representado como \.mp4 es alcanzado.

Asegura los extremos de una cuerda con .mp4 mediante el uso de la $ ), que coincide con el final de la cadena.

Esta parte es, sin embargo, un poco flexible, lo que le dará resultados no deseados si los nombres de archivo es inconsistente y tiene archivos con más de cinco partes separadas por puntos en sus nombres como file.number1.2010.720p.otherinfo.extrainfo.mp4

Si este es el caso, por favor, sustituir esta parte con el más estricto de la expresión regular a continuación. De esta forma, es sólo funcionan en archivos con cinco partes separadas por puntos en sus nombres:

^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.mp4$

Parte # 3:

$1$2.mp4

Define el nuevo nombre de archivo como lo es en virtud de la variable para el primer grupo $1 ( en este caso, file ) + lo que hay debajo de la variable para el segundo grupo $2 ( en este caso, number(x) ) + .mp4

Parte # 4:

*

Opera en todos los archivos en el directorio actual.

2voto

Sebastien Puntos 2038

Usted puede utilizar cut y bash de manipulación de cadena:

Primer enfoque: sólo con cut:

for I in .*mp4
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2,6)"
done 

Explicación:

  • for... seleccionar todas las .mp4 archivos
  • echo $I | va a convertir el I variable en una entrada para el próximo programa
  • cut -d. -f 1,2,6 selecciona los campos 1, 2 y 6, donde los campos están separados por .

Pero este enfoque puede ser problemático, ya que, el 6 de campo puede no ser la extensión.


Así que usted puede tener una segunda manera:

for I in .*mp4
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2).mp4"
done 

Con ese comando, se fuerza a que la extensión a .mp4. Que va a trabajar, pero lo que si tiene no sólo mp4 archivos con el mismo patrón de nomenclatura?


En ese caso, puede utilizar la extensión de selección:

for I in *mp4 *avi
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2).${I##*.}"
done
  • ${I##*.} le permitirá seleccionar lo que está detrás de la última . en la variable I

Nota: para prevenir el mal comportamiento, he añadido echo en los comandos para ver lo que va a hacer antes de ponerlo en marcha realmente.

1voto

xubuntu Puntos 86

Seleccione todos los archivos y presione F2; luego haga lo que se muestra en la imagen a continuación. renombrar a granel

https://docs.xfce.org/xfce/thunar/4.12/bulk-renamer/start

0voto

Bas Lamerichs Puntos 44

Siempre uso Thunar (administrador de archivos) para esto, solo ábralo, seleccione los archivos que desea modificar (cortar / pegar / ajustar / reemplazar caracteres) y luego haga clic derecho-> cambiar nombre

obtienes un menú sofisticado con muchas opciones y formas de cambiar los nombres de tus archivos y sus extensiones, y ves sus vistas previas en el panel derecho.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: