Как найти (или исключить) все каталоги и подкаталоги, соответствующие определенному шаблону (в Linux)?

17

Я пытаюсь использовать команду поиска Linux, чтобы найти все каталоги и подкаталоги, которые не имеют .svn (скрытые папки Subversion) в своем пути. Я могу получить его только для исключения самих каталогов .svn, но не каких-либо подкаталогов.

Вот что я делаю сейчас:

find . -type d \! -iname '*.svn*'

Я также попробовал:

find . -type d \! iname '.svn' \! iname '.svn/*'

Просто к сведению, я пытаюсь использовать шаблон поиска, чтобы я мог применить некоторые свойства subversion ко всем каталогам в моем репозитории, кроме скрытых папок и их подкаталогов subversion (применяя команду exec к каталогам, возвращаемым из команды find ) ..

ТИА

Джейсон Даун
источник

Ответы:

25
find . -type d -not \( -name .svn -prune \)
Дэн Карли
источник
Я пойду с этим, хотя они все, казалось, работали.
Джейсон Даун
Я использовал -prune для поиска раньше, но я не видел этот \ (... \) трюк. Благодарю.
Рори
Можете ли вы рассказать, как это будет работать в приложении node.js / express, где я хочу исключить узлы-модули из числа строк? Я безуспешно пытался find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l ...
Измельчение
В ответ на @shredding относительно приложений Node.js / Express и исключения каталогов node_modules из результатов поиска это работает для меня: поиск. -name ' .test.js ' -not (-wholename '* node_modules ') ... учитывая, что тесты, которые я хочу выполнить, имеют суффикс ".test.js"
mysterlune
Будет ли это работать без -type d? Я люблю искать все файлы, но рекурсивно исключаю ".git" dir
Джеймс Митч
6

Насчет просто

find . -type d |  grep -v '.svn'
wazoox
источник
Потеряет вашу способность использовать любое из действий поиска.
Дэвид Пашли
Да, но как насчет хорошей маленькой петли sh вместо этого? :) для ФАЙЛА в find . -type d | grep -v '.svn'; делать эхо, что угодно; сделано
wazoox
6

Как насчет -pathварианта найти?

find . -type d ! -path '*.svn*'
Рори
источник
1
Пропустил заключительную цитату. Есть шанс, что подстановочные знаки могут быть слишком жадными.
Дэн Карли
2

Вы можете использовать:

find . -type d -not -wholename '*.svn*' 
idbrii
источник
это сняло * с фронта ответа ... надо найти. -тип d -not -wholename ' /.svn/ ' (это общее название: «звездочка» косая черта svn косая черта звездочка)