bash在数字的同时将前导零添加到计数中

时间:2017-03-27 09:39:08

标签: bash numbers padding zero digits

我使用初始计数进行bash while循环。 我想在计数中添加%03d三位数,以便输出如下:

folder001
folder002

我的代码是:

    #!/bin/bash

    input_file=$1
    csv_file=$2

    count=1
    while IFS= read -r line || [[ -n "$line" ]]; do
      input_dir="./res/folder"%03d"$count/input"
      output_dir="./res/folder"%03d"$count/output"
      results_dir="./res/all_results_png/png"

      mkdir -p "$input_dir" "$output_dir"
      printf '%s\n' "$line" > "$input_dir/myline.csv"
      find $output_dir -name image_"folder$count*".png -exec cp {} $results_dir \;

      ((count++))
    done < "$csv_file"

我可以在上面的代码中添加%03d,但是它会按字面打印。 我在这里想念的是什么? 感谢

UPADTE

添加了一个更新: 尝试使用模式

执行find个文件
image_"folder$count*".png

我怎样才能反映find命令中的三位数变化?

2 个答案:

答案 0 :(得分:3)

您可以使用printf来实现此目的。这是一个例子:

AMD$ cat File.sh
#!/bin/bash

count=25
input_dir=$(printf "/res/folder%03d/input" $count)
echo $input_dir

AMD$ ./File.sh
/res/folder025/input

对于您问题中的更新,您可以执行相同的逻辑。

filename=$(printf "image_folder%03d" $count)
find . -name "$filename.png"

在你的情况下:

find $output_dir -name "$filename.png" -exec cp {} $results_dir \;

答案 1 :(得分:1)

您需要使用printf来获取格式化输出。将while行内的前2行替换为:

printf -v input_dir './res/folder%03d/input' $count
printf -v output_dir '/res/folder%03d/output' $count

如果count=3,那么2行以上就会有效:

input_dir="./res/folder003/input"
output_dir="./res/folder003/output"