Назад | Перейти на главную страницу

mv, переименовать, если существует

Мне нужно собрать много изображений в один каталог. Многие из этих изображений имеют одинаковые имена файлов.

Есть ли безопасная версия mv который автоматически переименует файлы, если целевое имя файла уже существует, так что pic1.jpeg становится чем-то вроде pic1_2.jpeg?

Я мог бы написать свой собственный скрипт на Python, но там должно быть что-то вроде этого, чтобы я мог:

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

mv уже поддерживает это из коробки (по крайней мере, в Debian):

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

Как видно из справочной страницы 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.

Делать --backup=t означают "сделать нумерованные резервные копии", вызывать следующим образом:

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

(dest_file, конечно, может быть каталогом).

Изменить: в более поздних версиях (по крайней мере, GNU coreutils 8.22, но уже намного раньше) вы можете просто написать

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