我的目录中有文件,文件名如下
01 ABC DEF.m4a
02 DEF ABC.m4a
etc...
我想将这些转换为
1.m4a
2.m4a
etc...
我如何使用命令行执行此操作?
答案1
如果您有 Perl 版本rename
(有时称为prename
),您可以使用它
rename -n 's/^0*(\d+).*(\.m4a)\z/$1$2/s' [0-9]*.m4a
当你高兴它会做你想做的事情时,删除标志-n
。
这使用正则表达式匹配:
^
- 需要主题开始0*
- 匹配零个或多个“0”(\d+)
- 匹配并记住一位或多位小数位.*
- 匹配所有内容,直到...(\.m4a)
- 匹配并记住 文字“.m4a”\z
- 需要主题结束¶s
flag - 确保.
匹配任何字节(包括换行符,在文件名中也有效)
然后使用$1
and$2
引用括号表达式的值。
1 此处并非绝对必要,因为 shell 给出的文件名作为参数全部以 结尾.m4a
,而前一个.*
是贪婪的。$
也可以在这里工作,但rename
其中适用于文件名(可以是任何非 0 字节序列,包括换行符),\z
最好作为$
主题末尾的匹配,例如\z
但也前最终的最后一个换行符。
答案2
怎么会
for FN in *.m4a; do mv -i "$FN" "${FN%% *}.m4a"; done
我懂了?