Cambiar el nombre de los archivos por lotes en la carpeta


10

¿Cómo puedo quitar algo de texto de los nombres de archivo en una carpeta?

Actualmente estoy intentando:

rename s/"NEWER_(.*?)"//g *

Pero nada se renombra

Tengo una carpeta principal, con un montón de subcarpetas, dentro de los archivos, que OneDrive pensó que sería una gran idea agregar "(NEWER_timestamp)", y me gustaría eliminar eso.

Nombres de archivo de ejemplo:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
¿Puedes publicar un nombre de archivo de ejemplo?
muru

seguro. pregunta actualizada con algunos
Kevin

Respuestas:


8

Intenta lo siguiente:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • Todos [^/]*(.*) .*$coinciden solo con la última parte de la ruta que no contiene a /. Y
  • En la expresión regular anterior, (.*)hay un grupo que combina todo después del último /y antes de un espacio . Su referencia será $1.
  • .*$coincide con todo al final $del nombre de los archivos después del espacio.
  • Finalmente, en la parte de reemplazo del cambio de nombre s/.../REPLACEMENT/, simplemente conservamos el grupo coincidente que está entre el último \y un espacio (.*)que se conoce como grupo de coincidencias.

2

Debería considerar usar las comillas fuera de la expresión regular (dentro, se toman literalmente como comillas) y escapar (. Tratar;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

La precisión de la expresión puede no ser necesaria, pero no puede ser demasiado cauteloso al modificar archivos.


todo lo que está haciendo es pasar el rato. reading filenames from STDINYa estoy dentro de la carpeta principal donde están todos estos archivos
Kevin

@ Kevin "Si no se dan nombres de archivo en la línea de comando, los nombres de archivo se leerán a través de la entrada estándar". Y dado que el caparazón se va *NEWER*como está si no se encuentran expansiones, debe haber cometido un error o está utilizando un caparazón que reemplazó un comodín sin igual por nada.
muru

copiado y pegado, en Ubuntu 14.10 shell
Kevin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.