Jak znaleźć (lub wykluczyć) wszystkie katalogi i podkatalogi pasujące do określonego wzorca (w systemie Linux)?

17

Próbuję użyć polecenia find Linux, aby znaleźć wszystkie katalogi i podkatalogi, które nie mają na swojej ścieżce plików .svn (ukryte foldery Subversion). Mogę to tylko wykluczyć z samych katalogów .svn, ale nie z żadnego z podkatalogów.

Oto co teraz robię:

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

Próbowałem też:

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

Po prostu FYI, próbuję użyć wzorca wyszukiwania, aby móc zastosować niektóre właściwości subversion do wszystkich katalogów w moim repozytorium, z wyjątkiem ukrytych folderów subversion i ich podkatalogów (poprzez zastosowanie polecenia exec do katalogów zwróconych z polecenia find ) ..

TIA

Jason Down
źródło

Odpowiedzi:

25
find . -type d -not \( -name .svn -prune \)
Dan Carley
źródło
Pójdę z tym, choć wszyscy wydawali się działać.
Jason Down
Wcześniej użyłem opcji -prune on find, ale nie widziałem tej \ (... \) sztuczki. Dzięki.
Rory
Czy możesz powiedzieć, jak to działałoby w aplikacji node.js / express, w której chcę wykluczyć moduły węzłów z liczenia linii? Próbowałem find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l bez powodzenia ...
niszcząc
W odpowiedzi na @shredding dotyczące aplikacji Node.js / Express i wykluczenia katalogów node_modules z wyników find, działa to dla mnie: find. -name „ .test.js” -nie (-wholename „* node_modules ”) ... biorąc pod uwagę, że testy Chcę uruchomić są z rozszerzeniem „.test.js”
mysterlune
Czy to zadziałałoby bez -type d? Lubię wyszukiwać wszystkie pliki, ale rekursywnie wykluczam katalog „.git”
James Mitch
6

A może po prostu

find . -type d |  grep -v '.svn'
wazoox
źródło
Traci zdolność korzystania z dowolnej akcji wyszukiwania.
David Pashley
Tak, ale co powiesz na ładną małą pętlę sh? :) dla PLIKU w find . -type d | grep -v '.svn'; róbcie cokolwiek; gotowe
wazoox
6

Co z -pathopcją znalezienia?

find . -type d ! -path '*.svn*'
Rory
źródło
1
Przegapił cytat końcowy. Istnieje zewnętrzna szansa, że ​​symbole wieloznaczne mogą być zbyt zachłanne.
Dan Carley
2

odnaleźć . -path './tmp' -prune -o .......


źródło
2

Możesz użyć:

find . -type d -not -wholename '*.svn*' 
idbrii
źródło
usunął * z przodu odpowiedzi ... powinien być znaleziony. -type d -not -wholename ' /.svn/ ' (to pełna nazwa squote asterisk slash dot svn slash asterisk squote)