2010-02-01 6 views
10

Przy użyciu komendy find, dlaczego jest tak, że dodaje się powodzeniem zignorować ukrytych katalogów (te zaczynające się od kropki), dopasowując wszystko inne:ignorowanie/prune ukryte katalogi z GNU znaleźć polecenie

find . -not \(-type d -name ".?*" -prune \)

ale to nie pasuje w ogóle nic:

find . -not \(-type d -name ".*" -prune \)

Jedyną różnicą jest znak zapytania. Czy to ostatnie polecenie nie powinno wykryć i wykluczyć katalogów zaczynających się od kropki?

+0

należy na superuser.com – t0mm13b

+3

@tommie - robi to? zależy od tego, czy jest używany interaktywnie, czy jako część skryptu; w tym drugim przypadku jest to prawdopodobnie uzasadnione pytanie o rozwój oprogramowania. –

+0

odrzucono za nieistotną nazwę tytułu "GNU find" w wybranej odpowiedzi. – danorton

Odpowiedz

8

ostatnie śliwki dowodzenia wszystko dlatego, że śliwki . - spróbuj je zobaczyć różnicę:

$ ls -lad .* 
. 
.. 
.dotdir 
$ ls -lad .?* 
.. 
.dotdir 

Widać, że w drugim, . nie jest wliczone, ponieważ jest tylko jeden znak długo. Glob ".?*" zawiera tylko nazwy plików składające się z co najmniej dwóch znaków (kropka plus dowolny pojedynczy znak, nieobowiązkowo oraz dowolny ciąg zero lub więcej znaków).

Nawiasem mówiąc, find nie jest komendą Bash.

+0

"find nie jest komendą Bash" - dobre połączenie, zmieniono tytuł, aby odzwierciedlić to – kostmo

2

Ta ostatnia komenda śliwka . sama - katalog, w którym działa find przeciwko - i dlatego nie generuje żadnych wyników.

+0

myślisz, że masz na myśli "ostatnie" – kostmo