bash 获取文件数并传递给for循环
bash get the number of files and pass it to for loop
我正在尝试获取目录中具有特定模式的文件的数量,然后执行从零到该数字的 for 循环。
number=`ls -d *pattern_* | wc -l`%3d
for i in {001.."$number"};do
# do something with $i
done
问题是我的号码是三位数,所以我在 number 变量的末尾添加了 %3d
,但它不起作用。
所以如果我有 20 个文件,for 循环中的 number 变量应该有一个前导零 020.
您真的不应该以这种方式依赖 ls
的输出,因为您的文件名可能包含嵌入空格、换行符等。
谢天谢地,有一种方法可以更可靠地做到这一点:
((i == 0))
for fspec in *pattern_* ; do
((i = i + 1))
doSomethingWith "$(printf "%03d" $i)"
done
这个循环将 运行 与文件计数相关的确切次数 不管 所述文件的怪异程度。它还将根据要求使用格式正确的(三位数)参数。
我正在尝试获取目录中具有特定模式的文件的数量,然后执行从零到该数字的 for 循环。
number=`ls -d *pattern_* | wc -l`%3d
for i in {001.."$number"};do
# do something with $i
done
问题是我的号码是三位数,所以我在 number 变量的末尾添加了 %3d
,但它不起作用。
所以如果我有 20 个文件,for 循环中的 number 变量应该有一个前导零 020.
您真的不应该以这种方式依赖 ls
的输出,因为您的文件名可能包含嵌入空格、换行符等。
谢天谢地,有一种方法可以更可靠地做到这一点:
((i == 0))
for fspec in *pattern_* ; do
((i = i + 1))
doSomethingWith "$(printf "%03d" $i)"
done
这个循环将 运行 与文件计数相关的确切次数 不管 所述文件的怪异程度。它还将根据要求使用格式正确的(三位数)参数。