在 bash 脚本循环中将目录命名为 0001 而不是 1

Mar*_*llo 10 bash

在以下 bash 脚本中,如果 j=0000,我该如何更改以下 bash 脚本以创建名为 0001、0002、...的目录?实际上它使目录命名为 1, 2, 3

for i in *.jpg; do let j+=1 ; mkdir $j ; done
Run Code Online (Sandbox Code Playgroud)

谢谢!

use*_*085 13

您当前的脚本仅使用十进制值 - 这显然会转换为没有前导零的值。

您必须将字符串填充为 4 个字符的长度,并带有前导零。为此,您可以使用反引号``获取 printf 调用的结果printf %04d $j

因此,您应该拥有完整的命令:

for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Run Code Online (Sandbox Code Playgroud)

来源: StackOverflow:bash - 在字符串中填充零

(显然,如果您想要更深入的解决方案,请参阅该问题的进一步答案,但这绝对适用于此用例。)


gni*_*urf 5

使用 bash,您最好的选择是:

mkdir {0001..0666}
Run Code Online (Sandbox Code Playgroud)

创建名称0001为 to 0666(零填充)的目录。

如果您想要名为prefix0001suffix, prefix0002suffix, ... 的目录,则:

mkdir prefix{0001..0666}suffix
Run Code Online (Sandbox Code Playgroud)

会做。

如果您只想要奇数目录名称

mkdir {0001..0666..2}
Run Code Online (Sandbox Code Playgroud)

等等...请参阅参考手册中的支撑扩展bash

正如 FEichinger 指出的那样,您需要提前知道目录的数量。如果你想要一个接近你的解决方案,但真正安全并使用更现代的 bash 成语:

for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done
Run Code Online (Sandbox Code Playgroud)