4

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

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

4 回答 4

8

使用renameperl 自带的一个小脚本:

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

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

rename -n 's/(\d{3})/0$1/g' myfile_*
于 2010-03-10T11:07:58.790 回答
5

只需使用外壳,

for file in myfile*
do
    t=${file#*_}
    f=${file%%_*}
    number=$(printf "%04d" ${t%%_*})
    newfile="${f}_${number}_${t#*_}"
    echo mv "$file" "$newfile"
done
于 2010-03-10T11:15:52.547 回答
1

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

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

于 2010-03-10T11:07:04.627 回答
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
于 2010-03-10T11:14:25.407 回答