Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I need to assemble a lot of images into one directory. Many of those images have the same file names.

Is there some safe version of mv that will automatically rename files if the target filename already exists so that pic1.jpeg becomes something like pic1_2.jpeg?

I could write my own python script but there has to be something like this out there so I can do:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;
share|improve this question
add comment

1 Answer

mv already supports this out of the box (at least in Debian):

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

As seen in mv(1) manpage:

--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.

In this case --backup=t means numbered backups.

share|improve this answer
    
+1 for an amazingly clean solution. BTW the option is present on RHEL 6 too. –  Paweł Brodacki May 7 '11 at 12:32
    
While nice functionality, this does not really help that much in my case since it will append the suffix after the extension, so the files will end up with names like .jpg~1~ while I would need them to be named _1.jpg. I will probably use mmv to rename the files after moving them. –  theduke May 7 '11 at 16:11
3  
this is the mmv command that will achieve my desired result after doing mv --backup=numbered: mmv -v "..~*~" "#1_#3.#2" –  theduke May 7 '11 at 16:21
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.