主打一个“懒”字!
移动文件啊,重命名啥的,动手拖拖不行嘛?!
不行!用键盘,用命令行!
比如:
想要移动
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/ \;
解释一下每个部分的作用
-
find .:find用于在目录树中查找文件和目录。.指定从当前目录开始搜索。
-
-type f:- 这个选项限制
find命令只查找文件(不包括目录)。
- 这个选项限制
-
-regex '.* - [0-9][0-9]\.jpg':-regex选项让find使用完整的正则表达式来匹配文件路径。'.* - [0-9][0-9]\.jpg'是一个正则表达式,用来匹配文件名中包含 " - 数字数字.jpg" 的文件。
-
-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执行的命令结束。
-
-exec mv {} DestinationFolder/ \;:- 这个命令也是
-exec用法的一个例子,用于将找到的文件移动到指定目录。 mv是移动(或重命名)文件的命令。{}代表当前处理的文件名。DestinationFolder/是目标目录,所有找到的文件都会被移动到这个目录。\;表示-exec执行的命令结束。
- 这个命令也是