我正在尝试查找与CVS相比不是最新的所有文件。由于我们的CVS结构已损坏(在某些目录中递归不好),我现在尝试使用find进行解决。

我现在所拥有的是:

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)的尝试无效,它们仍然显示出来。
有人对如何将它们从我的搜索结果中删除提出建议吗?

最佳答案

失败的原因与布尔布尔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都不重要。小心地使用括号可能会产生您想要的结果。

09-04 06:15