如何从文件的扩展名中删除数字

How to remove numbers from extensions from files

我在一个目录中有很多文件,扩展名为 .text(2).text(1)。 我想从分机中删除数字,输出应该是这样的 .text.text 。 任何人都可以帮我编写 shell 脚本吗? 我正在使用 centOs。

一个非常便携的方法是这样的:

for i in *.text*; do mv "$i" "$(echo "$i" | sed 's/([0-9]\{1,\})$//')"; done

遍历所有以 .text 结尾的文件,后跟任何内容。使用 sed 从每个文件名的末尾删除任何包含一位或多位数字的括号。

如果括号内的所有数字都是个位数并且您使用的是bash,您还可以使用内置参数扩展:

for i in *.text*; do mv "$i" "${i%([0-9])}"; done

扩展删除了每个文件名末尾包含单个数字的任何括号。

另一种没有循环但也有 sed(以及里面所有正则表达式)的方法是管道到 sh:

ls *text* | sed 's/\(.*\)\..*/mv  * .text/' | sh

示例:

[...]$ ls
  xxxx.text(1) yyyy.text(2)
[...]$ ls *text* | sed 's/\(.*\)\..*/mv * .text/' | sh
[...]$ ls
  xxxx.text yyyy.text

解释:

\(\) 之间的所有内容都已存储,并且可以通过 </code>(或 <code></code>、...连续粘贴使用的每对括号的编号)。因此,上面的代码存储了第一个点 <code>\. 之前的所有字符,然后是这样的复合序列:

mv  xxxx* xxxx.text
mv  yyyy* yyyy.text

通过管道传输到 sh

如果文件在同一个文件夹中,最简单的方法

rename 's/text\([0-9]+\)/text/' *.text*  

link