我有一个名为的文件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
命令。