将目录中的所有文件名更改为数字

将目录中的所有文件名更改为数字

我的目录中有文件,文件名如下

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- 需要主题结束¶
  • sflag - 确保.匹配任何字节(包括换行符,在文件名中也有效)

然后使用$1and$2引用括号表达式的值。


1 此处并非绝对必要,因为 shell 给出的文件名作为参数全部以 结尾.m4a,而前一个.*是贪婪的。$也可以在这里工作,但rename其中适用于文件名(可以是任何非 0 字节序列,包括换行符),\z最好作为$主题末尾的匹配,例如\z但也最终的最后一个换行符。

答案2

怎么会

for FN in *.m4a; do mv -i "$FN" "${FN%% *}.m4a"; done

我懂了?

相关内容