File sh-追加0';s根据最大值设置为文件名

File sh-追加0';s根据最大值设置为文件名,file,loops,sorting,arguments,sh,File,Loops,Sorting,Arguments,Sh,我想做一个文件分拣机。在当前目录中,我有如下文件: info-0.jpg info-12.jpg info-40.jpg info-5.jpg info-100.jpg 我希望它变成 info-000.jpg info-012.jpg info-040.jpg info-005.jpg info-100.jpg 也就是说,附加0以便位数等于3,因为最大数字是100,并且有3个位数 如果$1是“info”,我想通过在每个文件名上循环来使用cut和wc,但是如何使用。谢谢 我这样做是为了开始,但

我想做一个文件分拣机。在当前目录中,我有如下文件:

info-0.jpg
info-12.jpg
info-40.jpg
info-5.jpg
info-100.jpg
我希望它变成

info-000.jpg
info-012.jpg
info-040.jpg
info-005.jpg
info-100.jpg
也就是说,附加0以便位数等于3,因为最大数字是100,并且有3个位数

如果
$1
“info”
,我想通过在每个文件名上循环来使用cut和wc,但是如何使用。谢谢

我这样做是为了开始,但得到一个语法错误

wcount=0

for i in $filename-*.jpg; do                                                    
       wcount=$((echo $i | wc -c))                                                 
  done 

该键使用
printf
格式,强制宽度为3位数,并包括
0
填充;脚本的
printf“%03d”$numPart部分

此外,语法
${f%.*}
是现代shell提供的一组功能,用于删除变量值的一部分,其中
%
表示从值的右侧匹配(并销毁)最小匹配,而
${numPart#*-}
表示从值的左侧匹配(并销毁)最小匹配。还有
%%
(右侧最大匹配)和
##
(左侧最大匹配)。在您的命令行上尝试一个变量,并熟悉它

在您的环境中三次检查此代码的输出,只有在确保所有
mv
命令看起来正确时,才删除
/bin/mv
前面的
echo

如果您收到一条错误消息,如
找不到/bin/mv
,则输入
键入mv
,并用为
mv
返回的任何路径替换
/bin//code>


对此有什么想法吗?
for f in info*.jpg ; do
  numPart=${f%.*} ; #dbg echo numPart1=$numPart;
  numPart=${numPart#*-}; #dbg echo numPart2=$numPart;
  newFilename="${f%-*}"-$(printf '%03d' "$numPart")."${f##*.}"
  echo /bin/mv "$f" "$newFilename"
done