Почему точка в командах поиска?


14

Как правило, можно увидеть findкоманды, которые выглядят так:

$ find . -name foo.txt

когда поиск начинается с текущего каталога. Я обнаружил, что на моих машинах (Ubuntu, Cygwin) я получаю те же результаты без точки.

Почему это обычно включено? Это просто соглашение, которое должно быть явным, или оно было / требуется в определенных системах?

Ответы:


27

Некоторые версии * findтребуют, чтобы вы указали аргумент пути, который является каталогом, из которого начинается поиск. Точка .просто представляет текущий каталог, в котором обычно вы хотите искать.

Вы можете заменить это любым путем, который вы хотите использовать в качестве основы для поиска. В некоторых версиях find это можно оставить, поскольку подразумевается текущий каталог, если отсутствует аргумент path.

Вы можете запустить man findв своей оболочке подробности об аргументах. Например, синопсис использования для моего указывает на то, что аргумент пути является необязательным (внутри квадратной скобки []):

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

Если вы запустили my findбез аргументов, будут возвращены все файлы и каталоги, начиная с текущей папки. Ваш пример просто прямо заявляет, что поиск должен начинаться с .и включает выражение в -name foo.txtкачестве одного из поисковых фильтров.

* Примечательно, что все варианты BSD и все остальное строго соответствует стандарту POSIX . GNU find позволяет сделать это необязательным.


1
Знаете ли вы, какие варианты поиска требуют этого? Или где я мог бы искать, чтобы продолжить расследование? (найти трудно гуглить)
Эрик Уилсон

Интересная вещь о пути поиска по умолчанию.
rozcietrzewiacz

2
Я полагаю, что большинство вариантов поиска BSD требуют аргумента пути, в то время как в GNU это необязательно. Вариации могут существовать.
Калеб

2
Обратите внимание, что по крайней мере в стандартных спецификациях POSIX 2008 года pathэто обязательный аргумент для поиска .
Калеб

1
Nit pick: «Вы можете заменить эту [точку] на любой путь, который вы хотите» → «любые пути, которые вы хотите», так как вы можете сказать find dir1 dir2 dir3 -name foo.txt.
G-Man говорит: «Восстановите Монику»

5

Например, AIX-версия find требует путь и не будет работать, если он не указан.

# 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]

Хотя на некоторых машинах AIX может быть установлен GNU find, который может справиться без пути,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.