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

Odpowiedzi:


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

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'

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*'

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 .......


2

Możesz użyć:

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

usunął * z przodu odpowiedzi ... powinien być znaleziony. -type d -not -wholename ' /.svn/ ' (to pełna nazwa squote asterisk slash dot svn slash asterisk squote)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.