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

时间:2012-06-21 12:27:49

标签: bash rename mv

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

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

我试过这个:

 for i in temp_?.txt; 
 do
   j=echo $i | sed 's/[^0-9]*/0[^0-9]*/g';
   mv "$i" "$j"; 
 done 

4 个答案:

答案 0 :(得分:1)

尝试将sed命令修改为

sed 's/[0-9]/0&/'

这将为您的示例案例工作。

您的命令不起作用,因为当您尝试引用匹配的字符串时,实际上不会:&(对于整个匹配)或编号为references

答案 1 :(得分:1)

不需要sed;只需使用您对文件名的了解:

for i in {0..9}
do
   mv temp_$i.txt temp_0$i.txt
done

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

您需要转义变量作业

j=`echo echo $i | sed 's/[^0-9]*/0[^0-9]*/g'`

另外,除非你在一行上完成所有操作,否则你不需要在每个语句的末尾加分号