bash获取文件数并将其传递给for循环

时间:2017-03-31 08:54:32

标签: bash for-loop leading-zero

我试图在目录中获取具有特定模式的文件数,然后执行从零开始到该数字的for循环。

number=`ls -d *pattern_* | wc -l`%3d
for i in {001.."$number"};do
  # do something with $i
done

问题是我的数字是三位数,因此我将%3d添加到 number 变量的末尾,但它无效。

所以如果我有20个文件,for循环中的数字变量应该得到前导零 020

1 个答案:

答案 0 :(得分:3)

你真的不应该以这种方式依赖ls的输出,因为你可以拥有包含嵌入空格,换行符等的文件名。

谢天谢地,有一种方法可以更可靠的方式做到这一点:

((i == 0))
for fspec in *pattern_* ; do
    ((i = i + 1))
    doSomethingWith "$(printf "%03d" $i)"
done

此循环将运行与文件计数相关的确切次数,无论所述文件的奇怪性。它还将根据请求使用格式正确的(三位数)参数。