Почему "найти" обрезку не так, как я думаю?
Я использую MacOSX 10.5.8
Я запускаю следующее:
~/Sites/jjprof/trunk/content > find . -type d -name '*svn' -prune
./.svn
./resources/.svn
./resources/sitewide/.svn
./temporary/.svn
./users/.svn
./users/avatars/.svn
Я ожидаю, что эта команда будет игнорировать все подкаталоги.svn; вместо этого он отображает их.
find . -name '*svn' -prune
делает то же самое.
2 ответа
Попробуй это:
find -type d -path '.svn' -prune -o -print
От man find
в разделе -name
:
Чтобы игнорировать каталог и файлы в нем, используйте
-prune
; см. пример в описании-path
,
В разделе о -path
:
Чтобы игнорировать все дерево каталогов, используйте
-prune
вместо проверки каждого файла в дереве. Например, чтобы пропустить каталогsrc/emacs
и все файлы и каталоги под ним, и напечатать имена других найденных файлов, сделайте что-то вроде этого:find . -path ./src/emacs -prune -o -print
Из раздела "Примеры":
Тем не менее
-prune
само действие возвращает истину, поэтому следующее-o
гарантирует, что правая часть будет оценена только для тех каталогов, которые не были удалены (содержимое сокращенных каталогов даже не посещается, поэтому их содержимое не имеет значения).
найти ручные состояния, что чернослив "игнорирует предыдущий путь...", поэтому команда должна быть
find . -prune -type d -name '*svn'
Это потому, что вы можете иметь что-то вроде
find -path . -name '*svn' -o -path './notimportantdir' -prune
который находит '*svn' в текущем пути, кроме тех, которые находятся в notimportantdir