Как найти (или исключить) все каталоги и подкаталоги, соответствующие определенному шаблону (в 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'

Потеряет вашу способность использовать любое из действий поиска.
Дэвид Пашли

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

6

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

find . -type d ! -path '*.svn*'

1
Пропустил заключительную цитату. Есть шанс, что подстановочные знаки могут быть слишком жадными.
Дэн Карли

2

находить . -path './tmp' -prune -o .......


2

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

find . -type d -not -wholename '*.svn*' 

это сняло * с фронта ответа ... надо найти. -тип d -not -wholename ' /.svn/ ' (это общее название: «звездочка» косая черта svn косая черта звездочка)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.