如果找到相应的文件,则在bash中过滤文件列表



我有一堆.js文件。由于有相应的.spec.js,有些有.test.js文件,有些没有相应的文件。

我正在将规范文件转换为测试文件,但我想首先针对最经常更改的文件。

要做到这一点,我有一个bash命令,在Git中查找大多数更改的文件,但我想过滤返回的列表,只包括具有匹配的.spec.js文件的文件。

下面是现有的命令:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

要求列出缺少相应文件的文件的问题中的代码看起来很有帮助

for f in *.ext; do test -e $f.txt || echo $f; done

意味着我可以使用

for f in $(git log --pretty=format: --name-only); do test -e ${f%.*}.spec.js && echo $f; done | sort | uniq -c | sort -rg | head -25

但是如果可能的话,我不想遍历git日志输出的每一行,因为它显然包含重复的内容!这是相当快的(~1秒),但我觉得应该有一个"整洁"的选项。

过滤器列表中存在的文件的答案几乎有帮助,但依赖于ls

有更好的方法得到这个输出吗?

可能是这样的:while IFS= read -r file; do echo $file done < <(git log --pretty-format: --name-only | grep ".spec.js" | sort | uniq -c | sort -rg | head -25)这是使用grep过滤git日志结果的一种方法。然后你可以在while循环中做任何你想做的事情。这是经过测试的。确保这些<(

)之间没有空格

最新更新