如何从文件的扩展名中删除数字
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*
我在一个目录中有很多文件,扩展名为 .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*