重命名BASH中的几个文件

时间:2010-03-10 10:58:39

标签: bash renaming

我想重命名文件编号:我有一个'???'的文件格式我需要把它们放在'????'中。

myfile_100_asd_4 to myfile_0100_asd_4

由于 阿尔曼。

不那么优雅解决方案:

#/bin/bash
snap=`ls -t *_???`
c=26 
for k in $snap 
do 

     end=${k}
     echo  mv  $k ${k%_*}_0${k##*_}_asd_4
     (( c=c-1 ))

done

这对我有用,因为我也有myfile_100文件。

4 个答案:

答案 0 :(得分:8)

使用rename,这是perl附带的一个小脚本:

rename 's/(\d{3})/0$1/g' myfile_*

如果在表达式之前传递-n参数,它只会打印它本来会重命名的内容,不会采取任何操作。这样,您可以在重命名文件之前验证它是否正常工作:

rename -n 's/(\d{3})/0$1/g' myfile_*

答案 1 :(得分:5)

只需使用shell,

for file in myfile*
do
    t=${file#*_}
    f=${file%%_*}
    number=$(printf "%04d" ${t%%_*})
    newfile="${f}_${number}_${t#*_}"
    echo mv "$file" "$newfile"
done

答案 2 :(得分:1)

有一个名为 ren manpage)的UNIX应用程序,它支持使用搜索和替换模式重命名多个文件。你应该能够拼凑出一个将额外的0注入文件名的模式。

编辑:项目页面带有下载链接,可在Freshmeat找到。

答案 3 :(得分:0)

尝试:

for file in `ls my*`
do
a=`echo $file | cut -d_ -f1`
b=`echo $file | cut -d_ -f2`
c=`echo $file | cut -d_ -f3,4`

new=${a}_0${b}_${c}
mv $file $new
done