mv,重命名(如果存在)


26

我需要将很多图像组装到一个目录中。这些图像中有许多具有相同的文件名。

mv如果目标文件名已经存在,是否有某种安全版本会自动重命名文件,从而pic1.jpeg变成类似文件的名称pic1_2.jpeg

我可以编写自己的python脚本,但必须有类似的内容,这样我就可以做到:

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

Answers:


38

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>

1
+1是一个非常干净的解决方案。顺便说一句,RHEL 6上也存在该选项。
帕维尔Brodacki

虽然功能不错,但对我来说并没有多大帮助,因为它将在扩展名后附加后缀,因此文件结尾将带有.jpg〜1〜之类的名称,而我需要将它们命名为_1.jpg。移动文件后,我可能会使用mmv重命名文件。
theduke 2011年

4
这是MMV命令,这样做后,将实现我想要的结果MV --backup =编号:MMV -v “ ”#1_#3,#2“ 〜*〜。”
theduke

在我的Debian系统(mmv 1.01b-18)上,正确的mmv命令为:mmv -v "*.*~*~" "#1_#3.#2"
Xavier
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.