主打一个“懒”字!
移动文件啊,重命名啥的,动手拖拖不行嘛?!
不行!用键盘,用命令行!
比如:
想要移动
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
执行的命令结束。
- 这个命令也是