Исключить определенные шаблоны имен и каталогов из Find - PullRequest
3 голосов
/ 15 ноября 2010

Я пытаюсь найти все файлы, которые не обновлены по сравнению с 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) не работает, они все равно появляются.У кого-нибудь есть предложения, как получить их из моих результатов поиска?

1 Ответ

2 голосов
/ 18 ноября 2010

Это сбой по той же причине, по которой смешивание логических 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 также делает это, так что вы видите, что ни одно из AND не имеет значения, если какое-либо OR совпадает. Тщательное применение скобок, вероятно, даст результаты, к которым вы стремитесь.

...