mv, renombrar si existe


26

Necesito ensamblar muchas imágenes en un directorio. Muchas de esas imágenes tienen los mismos nombres de archivo.

¿Existe alguna versión segura de mveso que automáticamente cambie el nombre de los archivos si el nombre de archivo de destino ya existe para que se pic1.jpegconvierta en algo así pic1_2.jpeg?

Podría escribir mi propio script de Python, pero tiene que haber algo como esto para poder hacer:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;

Respuestas:


38

mv ya admite esto de forma inmediata (al menos en Debian):

mv --backup=t <source_file> <dest_file>

Como se ve en la página de manual de mv (1):

--backup[=CONTROL]
         make a backup of each existing destination file

The  backup  suffix  is  `~',  unless  set  with   --suffix   or   SIM‐
PLE_BACKUP_SUFFIX.   The version control method may be selected via the
--backup option or through the  VERSION_CONTROL  environment  variable.

Para hacer --backup=tsignifica "hacer copias de seguridad numeradas", invoque de la siguiente manera:

env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file>

(dest_file puede ser, por supuesto, un directorio).

Editar: en versiones posteriores (al menos GNU coreutils 8.22 pero prolly ya mucho antes) simplemente puede escribir

mv --backup=numbered <source_file> <dest_file>

1
+1 para una solución increíblemente limpia. Por cierto, la opción también está presente en RHEL 6.
Paweł Brodacki

Si bien es una buena funcionalidad, esto realmente no ayuda mucho en mi caso, ya que agregará el sufijo después de la extensión, por lo que los archivos terminarán con nombres como .jpg ~ 1 ~ mientras que necesitaría que se llamaran _1.jpg. Probablemente usaré mmv para cambiar el nombre de los archivos después de moverlos.
theduke

44
este es el comando MMV que permitirá alcanzar el resultado deseado después de hacer mv = --backup numerada: MMV -v " "# 1_ # 3. # 2" ~ * ~."
theduke

En mi sistema Debian (mmv 1.01b-18), el comando mmv correcto es:mmv -v "*.*~*~" "#1_#3.#2"
Xavier
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.