mv, переименуй если есть

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

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

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

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

2 ответа

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

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

Как видно на man-странице 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, конечно, может быть каталогом).

moveкоманда переименовывает файл, если файл существует.

Установить

      node install -g @gauravnumber/move

Пример

      move *.jpg dirname

ссылка на репо

Другие вопросы по тегам