查找文件并排除某些文件和目录

时间:2018-03-30 18:59:09

标签: bash shell grep find

我想在目录中找到扩展名为.hs的所有文件,但要排除子目录sub中的所有文件以及名称中包含test的其他一些文件。 我阅读并尝试使用findprune,但不理解复杂的逻辑,我的尝试都没有奏效。

天真的

find . -name "*.hs" -not -name '*sub*' -not -name "*test*"

也不是

find . -name "*.hs" -not -path '/sub' -not -name "*test*"  

确实有效。我认为这个(相对)简单的问题应该有一个简单的解决方案。

似乎有效的解决方案是

find . -name "*.hs"   -not -name "*test*"   | grep -v  "sub"

比使用prune更简单,但肯定可以改进吗?

1 个答案:

答案 0 :(得分:2)

您的第一次尝试会排除名称中包含sub的所有文件。

您的第二次尝试会排除路径正好为/sub的所有文件。

将两者合并以匹配路径包含sub的所有文件:

-not -path "*sub*"

但是,-prune是更好的解决方案,因为它会跳过目录而不是无效地匹配其中的每个条目。