主打一个“懒”字!

移动文件啊,重命名啥的,动手拖拖不行嘛?!

不行!用键盘,用命令行!

比如:

想要移动 ZYC01981 - 01.jpg,同时又想把 - 01 后缀给去掉,怎么做?

好记性不如烂笔头!

很厉害?嗯!唯手熟尔~

要匹配任何以 " - 01"、" - 02"、" - 03"、" - 12"、" - 13" 等等等等结尾的 .jpg 文件,可以这样写:

find . -type f -regex '.* - [0-9][0-9]\.jpg'

这个正则表达式会匹配任何以两位数字结尾的 .jpg 文件。如果需要限制特定的数字,则可以调整正则表达式的数字部分。例如,只匹配以 “01”、“02”、“03”、“12”、“13” 结尾的文件:

find . -type f -regex '.* - \(01\|02\|03\|12\|13\)\.jpg'

对于重命名操作,如果希望去掉文件名中的 " - 数字" 部分,可以使用以下命令(使用 echo 只打印不执行):

find . -type f -regex '.* - [0-9][0-9]\.jpg' -exec bash -c 'echo mv "$0" "${0/ - [0-9][0-9]/}"' {} \;

如果想要移动它们,则可以:

find . -type f -regex '.* - [0-9][0-9]\.jpg' -exec mv {} DestinationFolder/ \;

解释一下每个部分的作用

  1. find .

    • find 用于在目录树中查找文件和目录。
    • . 指定从当前目录开始搜索。
  2. -type f

    • 这个选项限制 find 命令只查找文件(不包括目录)。
  3. -regex '.* - [0-9][0-9]\.jpg'

    • -regex 选项让 find 使用完整的正则表达式来匹配文件路径。
    • '.* - [0-9][0-9]\.jpg' 是一个正则表达式,用来匹配文件名中包含 " - 数字数字.jpg" 的文件。
  4. -exec bash -c 'echo mv "$0" "${0/ - [0-9][0-9]/}"' {} \;

    • -exec 选项后跟一个命令,该命令对每个找到的文件执行。在此处,它调用 bash -c,允许执行更复杂的 bash 命令。
    • 'echo mv "$0" "${0/ - [0-9][0-9]/}"' 是一个 bash 命令。它使用 echo 预览 mv 命令的效果,而不实际执行文件移动
      • "$0" 代表当前处理的文件名。
      • "${0/ - [0-9][0-9]/}" 是 bash 的参数替换,它在文件名中删除 " - 数字数字" 模式。
    • {}find 命令用来代表当前找到的文件名。
    • \; 表示 -exec 执行的命令结束。
  5. -exec mv {} DestinationFolder/ \;

    • 这个命令也是 -exec 用法的一个例子,用于将找到的文件移动到指定目录。
    • mv 是移动(或重命名)文件的命令。
    • {} 代表当前处理的文件名。
    • DestinationFolder/ 是目标目录,所有找到的文件都会被移动到这个目录。
    • \; 表示 -exec 执行的命令结束。