从文件名中删除所有非数字字符

从文件名中删除所有非数字字符

我有一个名为的文件042dasd|.txt,我想从其名称中删除所有非数字字符,因此输出将是042.txt。顺便问一下,我该如何对许多文件执行此操作?我尝试使用正则表达式,但我认为我的方法不对。

$ mv 042dasd|.txt # to 042.txt

对于许多文件示例

mv *.txt # remove all numbers from file names

答案1

替换/删除直到最后一个点的所有非数字。

$ rename -n 's/[^0-9](?![^.]*$)//g' *[0-9]*.txt

删除 -n 然后您就可以安全地采取行动了。

答案2

如果rename您的系统中未安装该命令,或者您不想使用它,则可以使用以下命令狂欢脚本可以作为替代方案:

#!/bin/bash
for f in *.* ; do
  ext="${f##*.}"
  bfn="${f%.*}"
  nfn="${bfn//[^0-9]/}"
  echo mv "$f" "$nfn.$ext"
done

循环for用于对与模式匹配的每个文件执行代码*.*。您可以将*.*模式更改为更适合您的模式;例如*.txt

该行将ext="${f##*.}"提取文件名的扩展名(最后的 .)。在您的示例文件名中,它将类似于txt。注意:如果文件名不包含扩展名,则此脚本可能无法按您希望的方式工作。尝试一下看看。

该行将bfn="${f%.*}"提取文件的基本名称,通过删除最后一个名称.及其后面的所有内容。

该行nfn="${bfn//[^0-9]/}"将从文件的基本名称中删除所有非数字字符。

该行将echo mv "$f" "$nfn.$ext"显示移动应执行的命令。如果您对输出满意,请删除该echo命令,以运行实际mv命令。

相关内容