计算文件夹中文件的列表(bash中某些文件除外)

时间:2018-08-15 04:53:25

标签: bash

我有一个bash脚本,针对文件夹中的一堆测试文件运行可执行文件。有些测试文件应该通过,有些应该失败。我要做的是列出应该失败的文件列表,然后将文件夹中的其余测试视为肯定测试。然后,我可以分别遍历每个列表并相应地处理结果。

这就是我所拥有的,当只有1个失败测试但无法进行更多测试时,它可以工作:

negative_tests() {
    echo "../testcases/test3.txt"
    echo "../testcases/test4.txt"
}
negative_tests=$(negative_tests)

positive_tests=$(comm -23 <(ls ../testcases/*) <(negative_tests))

log "Running tests.."
for testfile in $positive_tests; do
    ./a.out $testfile >> output.txt || { echo "Failed on $testfile." ; exit 1; }
done

for testfile in $negative_tests; do
    ./a.out $testfile >> output.txt && { echo "Succeeded on $testfile succeeded when failure was expected."; exit 1; }
done

我感觉到我只是缺少bash数据模型的工作原理。有什么想法或更好的方法吗?

1 个答案:

答案 0 :(得分:0)

看起来这种方法可行,但是comm的工作方式是,它希望所比较的行是有序的。因此,我需要将否定情况用管道传输到sort中,以便它们与ls中的文件顺序匹配:

positive_tests=$(comm -23 <(ls ../testcases/*) <(negative_tests | sort))

然后,一切正常。尽管我对看到人们可能有的其他解决方案很感兴趣。