bash 将前导零添加到计数中
bash add leading zeros to the count while number
我有 bash while 循环使用初始计数。
我想在计数中添加 %03d
三位数,以便输出如下:
folder001
folder002
我的代码是:
#!/bin/bash
input_file=
csv_file=
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
添加到上面的代码中,如您所见,但它是按字面意思打印的。
我在这里错过了什么?
谢谢
更新
添加了一个更新:
尝试使用
模式对文件进行 find
image_"folder$count*".png
如何在 find 命令中反映三位数的变化?
您需要使用 printf
来获取格式化输出。将 while
行内的前两行替换为:
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"
您可以使用 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 \;
我有 bash while 循环使用初始计数。
我想在计数中添加 %03d
三位数,以便输出如下:
folder001
folder002
我的代码是:
#!/bin/bash
input_file=
csv_file=
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
添加到上面的代码中,如您所见,但它是按字面意思打印的。
我在这里错过了什么?
谢谢
更新
添加了一个更新: 尝试使用
模式对文件进行find
image_"folder$count*".png
如何在 find 命令中反映三位数的变化?
您需要使用 printf
来获取格式化输出。将 while
行内的前两行替换为:
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"
您可以使用 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 \;