从“查找”中排除某些文件名模式和目录

时间:2010-11-15 12:35:46

标签: find gnu

我正在尝试查找与CVS相比不是最新的所有文件。由于我们的CVS结构被破坏(它在某些目录中没有很好地递归)我现在正试图解决它。

我现在拥有的是:

for i in `find .  -not \( -name "*\.jpg" \) -path './bookshop/mediaimg' -prune -o -path '*/CVS*' -prune -o  -path './files' -prune  -o -path './images/cms' -prune -o -path './internal' -prune -o -path './limesurvey171plus_build5638' -prune  -o -path './gallery2' -prune -o  -print  `; do cvs status  "$i" |grep Status ; done &>~/output.txt

但不知何故,我排除图像的尝试(在这种情况下为jpg)不起作用,它们仍然出现。 任何人都有关于如何从我的搜索结果中取出它们的建议吗?

1 个答案:

答案 0 :(得分:2)

这是因为混合布尔AND和OR总是失败的原因失败。

你在这里说的是(伪代码):

If (
    File Not Named '*.jpg' AND
    Path Matches './bookshop/mediaimg' AND
    Prone OR
    Path Matches '*/CVS*' AND
    Prune OR
    Path Matches './files' AND
    Prune OR
    Path Matches './images/cms' AND
    Prune OR
    Path Matches  './internal' AND
    Prune OR
    Path Matches  './limesurvey171plus_build5638' AND
    Prune OR
    Path Matches  './gallery2' AND
    Prune OR
    Print
)

现在,print始终返回true,我认为prune也是如此,所以你看到如果任何OR匹配,那么AND都不重要。仔细应用括号可能会产生你想要的结果。