Dlaczego kropka w poleceniach wyszukiwania?

14

Zazwyczaj widzi się findpolecenia wyglądające tak:

$ find . -name foo.txt

kiedy wyszukiwanie ma rozpocząć się od bieżącego katalogu. Zauważyłem, że na moich komputerach (Ubuntu, Cygwin) otrzymuję takie same wyniki bez kropki.

Dlaczego zazwyczaj jest dołączony? Czy jest to tylko konwencja, aby być jawnym, czy też była / jest wymagana w niektórych systemach?

Eric Wilson
źródło

Odpowiedzi:

27

Niektóre wersje * findwymagają podania argumentu path, który jest katalogiem, od którego należy rozpocząć wyszukiwanie. Kropka .oznacza po prostu, że bieżący katalog jest zwykle tam, gdzie chcesz wyszukać.

Możesz zastąpić to dowolną ścieżką, która ma być podstawą wyszukiwania. W niektórych wersjach find można to pozostawić, ponieważ domyślny katalog jest domyślny, jeśli nie ma argumentu path.

Możesz uruchomić man findw swojej powłoce, aby uzyskać szczegółowe informacje na temat argumentów. Na przykład streszczenie użycia dla mojego wskazuje, że argument ścieżki jest opcjonalny (w nawiasach kwadratowych []):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

Jeśli uruchomisz mój findbez żadnych argumentów, wszystkie pliki i katalogi zaczynające się od bieżącego folderu zostaną zwrócone. W twoim przykładzie po prostu wyraźnie zaznaczono, że wyszukiwanie powinno zaczynać się .i zawiera wyrażenie -name foo.txtjako jeden z filtrów wyszukiwania.

* W szczególności wszystkie warianty BSD i wszystko ściśle zgodne ze standardem POSIX . GNU find pozwala być opcjonalnym.

Caleb
źródło
1
Czy wiesz, które wersje find tego wymagają? Lub gdzie mogę szukać dalej? (znalezienie jest trudne do znalezienia w Google)
Eric Wilson,
Ciekawa rzecz w domyślnej ścieżce wyszukiwania.
rozcietrzewiacz
2
Wierzę, że większość wariantów BSD find wymaga argumentu ścieżki, podczas gdy w GNU find jest opcjonalny. Mogą istnieć różnice.
Caleb
2
Zauważ, że przynajmniej w standardowej specyfikacji POSIX 2008 pathjest wymaganym argumentem do znalezienia .
Caleb
1
Nit pick: „Możesz zastąpić tę [kropkę] dowolną ścieżką, którą chcesz” → „dowolną ścieżką , którą chcesz”, ponieważ możesz to powiedzieć find dir1 dir2 dir3 -name foo.txt.
G-Man mówi „Przywróć Monikę”
5

Na przykład wersja find systemu AIX wymaga ścieżki i nie będzie działać, jeśli nie zostanie podana.

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

Chociaż na niektórych komputerach z systemem AIX może być zainstalowany program GNU find, który poradzi sobie bez ścieżki,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
EightBitTony
źródło