我想重命名文件编号:我有一个'???'的文件格式我需要把它们放在'????'中。
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文件。
答案 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