znajdź katalog wykluczeń

13

Korzystam z systemu Linux (Ubuntu) i chciałbym wykluczyć niektóre katalogi (takie jak .hg), gdy robię

find | less  

Próbowałem następujących czynności, aby wykluczyć katalog .hg z listy, ale wydaje się, że nie działa.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Jak wykluczyć .directoryw poleceniu znajdowania

Senthil Kumaran
źródło

Odpowiedzi:

14

Podczas poszukiwań podobnych findrozwiązań odkryłem pomocne wyjaśnienie na temat używania opcji „find” w „sh” w sh? autor: Laurence Gonsalves .

Możesz użyć czegoś takiego jak:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

lub (bez nazwy)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

(Nieuchwytne) nawiasy \(i \)grupują testy ( typei name) oraz odpowiadające im akcje ( prunei printodpowiednio) razem po lewej i prawej stronie OR ( -o).

Ponieważ -oma niższy priorytet niż zestawianie, możesz pominąć nawiasy, jeśli chcesz. Wiele findimplementacji pozwala również pominąć finał -print.

find . -type d -name .hg -prune -o -type f -name "foo" -print
fheub
źródło
1
Właśnie miałem napisać swoje rozwiązanie, ale wydaje się, że dokładnie tak jest. Osobiście umieściłem w -pruneśrodku pierwszy zestaw nawiasów, a -type f -printdrugi - w celu uczynienia operacji i / lub operacji bardziej oczywistymi, ale poza tym wygląda to dla mnie wprost.
me_i
Poprawiłem nawiasy (i ich rozumowanie) dzięki komentarzowi @me_and.
fheub
2

Spójrz na ack: http://betterthangrep.com/

Oprócz posiadania rozsądnego zestawu domyślnie wykluczonych folderów (np. Domyślnym wykluczeniem jest .hg), łatwo jest wykluczyć nowe foldery:

ack --ignore-dir=.directory search_term

Aby przywrócić to do przypadku użycia, w którym szukasz listy plików, skorzystaj z -fopcji, jak w:

ack -f --ignore-dir=.directory

Zmieniłem pisanie skomplikowanych poleceń wyszukiwania / znajdowania na proste potwierdzenia.

Wskazówka: Umieść często używane opcje wiersza poleceń (na przykład wykluczone foldery) w pliku .ackrc.

Brian Leathem
źródło
Opierając się na find | lesspytaniu, PO szuka prostej listy plików. W czym to pomaga?
CVn
@ MichaelKjörling Jak powiedziałem w mojej odpowiedzi, opcja -f zapewnia listę plików.
Brian Leathem,
-2

możesz spróbować

find \( ! -regex '.*/\.directory\(\|/.*\)' \)
yuyichao
źródło
Cholernie pewne, że to nie działa tak, jak prosił PO.
me_i
Właśnie pomyślałem, że to właśnie miał na myśli.directory
yuyichao,