pas*_*ion 5 bash numbers padding digits zero
我有使用初始计数的 bash while 循环。我想%03d在计数中添加三位数,以便输出如下:
folder001
folder002
Run Code Online (Sandbox Code Playgroud)
我的代码是:
#!/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"
Run Code Online (Sandbox Code Playgroud)
%03d如您所见,我添加到上面的代码中,但它是按字面意思打印的。我在这里错过了什么?谢谢
添加了一个更新,即:尝试find使用该模式执行文件
image_"folder$count*".png
Run Code Online (Sandbox Code Playgroud)
我如何才能反映 find 命令中的三位数变化?
您可以使用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
Run Code Online (Sandbox Code Playgroud)
对于您问题中的更新,您可以执行相同的逻辑。
filename=$(printf "image_folder%03d" $count)
find . -name "$filename.png"
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
find $output_dir -name "$filename.png" -exec cp {} $results_dir \;
Run Code Online (Sandbox Code Playgroud)