首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过bash-scripting递归地重命名文件?

如何通过bash-scripting递归地重命名文件?
EN

Stack Overflow用户
提问于 2012-06-21 20:27:49
回答 4查看 286关注 0票数 0

我正在尝试在bash中重命名几个不同的文件。如何将例如temp_1重命名为temp_01直到09 (temp_9重命名为temp_09)?

我使用sed,但不知何故不起作用。

我试着这样做:

代码语言:javascript
复制
 for i in temp_?.txt; 
 do
   j=echo $i | sed 's/[^0-9]*/0[^0-9]*/g';
   mv "$i" "$j"; 
 done 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-21 20:40:35

尝试将sed命令修改为如下所示

代码语言:javascript
复制
sed 's/[0-9]/0&/'

这将完成您的示例案例的工作。

您的命令不起作用,因为当您试图引用匹配的字符串时,实际上并没有这样做:它是用& (对于整个匹配)或numbered references完成的。

票数 1
EN

Stack Overflow用户

发布于 2012-06-21 21:03:12

不需要使用sed;只需使用您所知道的文件名:

代码语言:javascript
复制
for i in {0..9}
do
   mv temp_$i.txt temp_0$i.txt
done
票数 1
EN

Stack Overflow用户

发布于 2012-06-21 20:58:18

它不起作用,因为您没有捕获sed的输出,您需要将sed放在反引号或$( ... )中。另外,你的RE是错误的,试试这个:

代码语言:javascript
复制
for i in temp_?.txt 
do  
    j=$(echo $i | sed 's/\([0-9]\{1,\}\)/0\1/g')
    mv "$i" "$j"   
done   

注意:对于扩展正则表达式,我更喜欢使用sed的-E选项,但是我不知道您的sed是否支持它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11138137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档