使用文件名中的数字批量重命名大量文件

使用文件名中的数字批量重命名大量文件

我有数百个文件名,文件名中带有数字标签,如下所示:

AAAA #12 SSSS.TXT
BBB #231 CDF.TXT
CDFSDAAAA #1 AAAASS.TXT

我想这样重命名:

#012 - AAAA #12 SSSS.TXT
#231 - BBB #231 CDF.TXT
#001 - CDFSDAAAA #1 AAAASS.TXT

我怎样才能做到呢?

谢谢

答案1

在 bash shell 中,

for file in *.TXT
do 
  [[ $file =~ \#([[:digit:]]+) ]] && mv -- "$file" "#$(printf '%03d' "${BASH_REMATCH[1]}") - ${file}"
done

这会循环当前目录中以 结尾的所有文件,.TXT并将它们与 bash 的=~条件表达式运算符进行比较。它将传入的文件名与右侧的正则表达式进行比较。正则表达式查找哈希标记(已转义,因此不是注释),后跟一些(在括号中捕获)数字。是+贪婪的,因此它将获取尽可能多的数字(1 位数字、4 位数字等),以第一个非数字结尾(在您的情况下为空格)。

Bash 将捕获的数字保存在${BASH_REMATCH[1]}(因为它是第一组括号);我们将该数字发送到 ,printf以便将其用零填充为三位数字,然后附加到 上以进行-其余的重命名。

仅当匹配成功(通过链接&&)时才会发生重命名。

答案2

如果您有基于 Perl 的rename命令

$ rename -n 's/.*#(\d+).*/sprintf "#%03d - %s", $1, $&/e' *.TXT
rename(AAAA #12 SSSS.TXT, #012 - AAAA #12 SSSS.TXT)
rename(BBB #231 CDF.TXT, #231 - BBB #231 CDF.TXT)
rename(CDFSDAAAA #1 AAAASS.TXT, #001 - CDFSDAAAA #1 AAAASS.TXT)

-n出于测试目的而添加)。

相关内容