在 Bash 脚本循环中创建名为 0001 而不是 1 的目录

在 Bash 脚本循环中创建名为 0001 而不是 1 的目录

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

for i in *.jpg; do let j+=1 ; mkdir $j ; done

谢谢!

答案1

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

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

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

for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done

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

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

答案2

使用 bash,最好的选择是:

mkdir {0001..0666}

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

如果您想要名为prefix0001suffixprefix0002suffix、 ... 的目录,则:

mkdir prefix{0001..0666}suffix

会做。

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

mkdir {0001..0666..2}

等等...参见括号扩展bash参考手册中

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

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

相关内容