Чому крапка в командах знаходження?


14

Як правило, видно findкоманди, які виглядають так:

$ find . -name foo.txt

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

Чому вона зазвичай включається? Це лише конвенція, яка повинна бути явною, або вона / це вимагається в певних системах?

Відповіді:


27

Деякі версії * of findвимагають надати аргумент шляху, який є каталогом, з якого почати пошук. Точка .просто представляє поточний каталог, як правило, там, де ви хочете здійснити пошук.

Ви можете замінити це будь-яким шляхом, який ви хочете стати базою пошуку. У деяких версіях знайти це може бути залишено, оскільки поточний каталог мається на увазі, якщо аргумент шляху немає.

Ви можете запустити man findу своїй оболонці, щоб отримати детальну інформацію про аргументи. Наприклад, синопсис використання шахти вказує на те, що аргумент шляху необов'язковий (всередині квадратної дужки []):

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

Якщо ви запустили мій findбез аргументів, усі файли та каталоги, що починаються з поточної папки, будуть повернуті. У вашому прикладі просто виразно зазначено, що пошук слід починати .і включає вираз -name foo.txtяк один із фільтрів пошуку.

* Зокрема, всі варіанти BSD і все, що суворо дотримується стандарту POSIX . Знайти GNU дозволяє не бути необов'язковим.


1
Чи знаєте ви, що вимагає цього? Або де я міг би шукати, щоб розслідувати далі? (знайти Google важко)
Ерік Вілсон,

Цікава річ про шлях пошуку за замовчуванням.
rozcietrzewiacz

2
Я вважаю, що для більшості варіантів знаходження BSD потрібен аргумент шляху, тоді як у GNU знайти його необов’язково. Можливі варіанти.
Калеб

2
Зауважте, що принаймні стандартні специфікації POSIX 2008 року pathє необхідним аргументом для пошуку .
Калеб

1
Nit pick: "Ви можете замінити цю [крапку] будь-яким потрібним вам шляху" → "будь-якими шляхами, які ви хочете", оскільки ви можете сказати find dir1 dir2 dir3 -name foo.txt.
G-Man каже: "Відновіть Моніку"

5

Наприклад, для AIX-версії знаходження потрібен шлях та не запускається, якщо його не передбачено.

# 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-пошук, який може впоратися без шляху,

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