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