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


17

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

Ось що я зараз роблю:

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

Я також спробував:

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

Просто FYI, я намагаюся використовувати шаблон пошуку, щоб я міг застосувати деякі властивості субверсії до всіх каталогів у моєму сховищі, за винятком прихованих папок та їх підкаталогів (за допомогою застосування команди exec до каталогів, повернутих з команди find ) ..

ТІА

Відповіді:


25
find . -type d -not \( -name .svn -prune \)

Я піду з цим, хоча вони, здавалося, працювали.
Jason Down

Я раніше використовував -prune при пошуку, але цього \ (... \) хитрості я не бачив. Спасибі.
Рорі

Чи можете ви сказати, як це буде працювати в додатку node.js / express, де я хочу виключити node-модулі з підрахунку рядків? Я намагався find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l без успіху ...
подрібнення

У відповідь на @shredding щодо програм Node.js / Express та виключення каталогів node_modules з результатів пошуку, це працює для мене: find. -name ' .test.js' -not (-wholename '* node_modules ') ... враховуючи, що тести, які я хочу запустити, суфіксні з ".test.js"
mysterlune

Чи вдалося б це зробити без -type d? Мені подобається шукати весь файл, але виключати ".git" рекурсивно
James Mitch

6

А як просто

find . -type d |  grep -v '.svn'

Втрачається здатність використовувати будь-які дії з пошуку.
Девід Пашлі

Так, а як же приємний маленький цикл sh? :) для FILE в find . -type d | grep -v '.svn'; робити відлуння все, що завгодно; зроблено
wazoox

6

Що з -pathваріантом знайти?

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

1
Пропущена заключна пропозиція. Є ймовірність, що макіяж може бути занадто жадібним.
Dan Carley

2

знайти. -путь './tmp' -prune -o .......


2

Ви можете використовувати:

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

вона викреслила * з лицьової сторони відповіді ... слід знайти. -тип d -not-ім'я імені ' /.svn/ ' (це всеіменований сквот зірочкою косою зіркою крапкою svn slash зірочка)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.