循环遍历100个子目录中的前10个

时间:2018-05-09 13:41:44

标签: bash

我有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循环中选择一个修正数字元素。

2 个答案:

答案 0 :(得分:2)

0循环播放以9.*{0..9}结尾的内容。如果你写了0,那就会以9while read ... < <(cmd)的数字结尾 - 更近,但仍然不对。

尝试此循环,循环读取前10个目录名称。它有点迟钝。主要想法是使用IFS=一次读取一行命令的输出。 -rwhile 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个文件夹。

我最重要的是做最后一个反斜杠以匹配目录。