mv,如果存在则重命名

the*_*uke 30 linux mv

我需要将大量图像组合到一个目录中。其中许多图像具有相同的文件名。

mv如果目标文件名已经存在,是否有一些安全版本会自动重命名文件,以便pic1.jpeg变成类似的东西pic1_2.jpeg

我可以编写自己的 python 脚本,但必须有这样的东西,所以我可以这样做:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;
Run Code Online (Sandbox Code Playgroud)

Mas*_*erM 47

mv 已经支持开箱即用(至少在 Debian 中):

mv --backup=t <source_file> <dest_file>
Run Code Online (Sandbox Code Playgroud)

如 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.
Run Code Online (Sandbox Code Playgroud)

要使--backup=t意思是“进行编号备份”,请按如下方式调用:

env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file>
Run Code Online (Sandbox Code Playgroud)

(dest_file 当然可以是一个目录)。

编辑:在以后的版本中(至少是 GNU coreutils 8.22 但已经很早了)你可以简单地写

mv --backup=numbered <source_file> <dest_file>
Run Code Online (Sandbox Code Playgroud)

  • 这是执行 mv --backup=numbered 后将达到我想要的结果的 mmv 命令: mmv -v "*.*.~*~" "#1_#3.#2" (5认同)
  • +1 表示非常干净的解决方案。顺便说一句,该选项也存在于 RHEL 6 上。 (2认同)