Renombrar archivos con una estructura especial de manera rápida

0

Revisé la solución aquí , pero no está abordando mi problema demasiado bien, porque no utiliza la estructura específica de mi denominación.

Tengo una colección de archivos, enumerados y nombrados de manera sistemática, por ejemplo

  

filep-x

donde x es un número que puede ser bastante grande y p es un marcador para un "makrocollection". Me gustaría copiar todos los archivos en una colección de objetos como una plantilla y renombrar automáticamente todos los archivos copiados como

  

fileq-x

En otras palabras, ¿hay una opción que pueda reemplazar nombres automáticamente usando el terminal (como es posible en muchos editores) sin trabajar con documentos adicionales?

¡Gracias de antemano!

    
pregunta mdot 22.02.2017 - 11:22

2 respuestas

2

Esto podría ser un trabajo para pax , asumiendo que existe una convención de nomenclatura consistente.

cd directory

pax -rws/filep/fileq/ filep-* /path/to/copy/directory
    
respondido por el fd0 22.02.2017 - 13:42
1

Por lo general, esto se puede hacer con un bucle bash , no el más rápido sino el más simple. En tipo de terminal:

for f in filep-* ; do mv -iv "$f" "$(echo "$f" | sed 's/p/q/')" ; done

Explicaciones:

  • for f in filep-* ; do - > para todos los archivos llamados filep-anything , haga lo siguiente
  • mv -iv A B move (= renombrar) de A a B, mientras dice lo que hace -v y solicita confirmación antes de sobrescribir un archivo existente -i
  • iban a mover un archivo "$f" (citas para solucionar problemas con, por ejemplo, espacios en los nombres de archivos) a:
  • $( $echo $f | sed 's/A/B' ) imprime el nombre del archivo y luego usa sed para s ubstitute la primera (! y primera solamente) ocurrencia de A con B (esto también puede ser sed 's/this123/that456/' , pero ten en cuenta que coincidirá el primer golpe)

Para asegurarse de que se comporta como se espera, ejecute esto primero:

for f in filep-* ; do echo mv -iv "$f" "$(echo "$f" | sed 's/p/q/')" ; done

Esto solo imprimirá el comando que se ejecutará para cada archivo y debería verse como mv -i filep-x fileq-x .

Nota: esto es para cambiar el nombre de los archivos y, por lo tanto, para después de copiarlos. Esto no hace la copia y el cambio de nombre en uno. También está destinado a ejecutarse desde el directorio donde se encuentran los archivos.

    
respondido por el Fiximan 22.02.2017 - 12:59

Lea otras preguntas en las etiquetas