我有100个子目录,我想在bash for循环中遍历前十个子目录,如下所示:
for d in ./output/*[0..9];
do
echo $d
done
但输出似乎不是我的预期:
./output/405050
./output/405140
./output/405309
./output/405310
./output/405319
./output/500550
./output/500589
./output/500610
为什么只打印了8个,我的问题是如何从这种类型的for循环中选择一个修正数字元素。
答案 0 :(得分:2)
0
循环播放以9
,.
或*{0..9}
结尾的内容。如果你写了0
,那就会以9
到while read ... < <(cmd)
的数字结尾 - 更近,但仍然不对。
尝试此循环,循环读取前10个目录名称。它有点迟钝。主要想法是使用IFS=
一次读取一行命令的输出。 -r
和while IFS= read -r dir; do
echo "$dir"
done < <(ls output/*/ | head -10)
是用来正确处理具有空格和反斜杠的目录名称的迂腐位。
i=0
for dir in output/*/; do
echo "$dir"
((++i < 10)) || break
done
或者使用这个更简单的版本与计数器:
dirs=(output/*/)
for dir in "${dirs[@]::10}"; do
echo "$dir"
done
或者将这个目录存储在一个数组中:
const
答案 1 :(得分:0)
你可以制作一个柜台:
#!/bin/bash
i=0;
for d in ./output/*/;
do
echo $d
echo ""
if [[ i == 10 ]]; then
break
fi
i+=1
done
这样你就可以得到10个文件夹。
我最重要的是做最后一个反斜杠以匹配目录。