Pourquoi le point dans les commandes find?


14

En règle générale, on voit des findcommandes qui ressemblent à ceci:

$ find . -name foo.txt

quand la recherche doit commencer à partir du répertoire courant. Je constate que sur mes machines (Ubuntu, Cygwin) j'obtiens les mêmes résultats sans le point.

Pourquoi est-il généralement inclus? Est-ce juste une convention pour être explicite, ou était / est-ce requis sur certains systèmes?

Réponses:


27

Certaines versions * de findnécessitent que vous fournissiez un argument de chemin d'accès qui est un répertoire à partir duquel commencer la recherche. Le point .représente simplement le répertoire actuel, c'est généralement là que vous souhaitez rechercher.

Vous pouvez le remplacer par n'importe quel chemin que vous souhaitez utiliser comme base de recherche. Dans certaines versions de find, cela peut être laissé car le répertoire courant est implicite si aucun argument de chemin n'est présent.

Vous pouvez exécuter man finddans votre shell pour plus de détails sur les arguments. Par exemple, le synopsis d'utilisation du mien indique que l'argument path est facultatif (entre crochets []):

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

Si vous exécutez my findsans aucun argument, tous les fichiers et répertoires à partir du dossier actuel seront retournés. Votre exemple indique simplement expressément que la recherche doit commencer à partir de .et inclut l'expression -name foo.txtcomme l'un des filtres de recherche.

* Notamment toutes les variantes BSD et tout ce qui respecte strictement la norme POSIX . GNU find lui permet d'être facultatif.


1
Savez-vous quelles versions de find nécessitent cela? Ou où pourrais-je chercher à enquêter davantage? (trouver est difficile à google)
Eric Wilson

Chose intéressante sur le chemin de recherche par défaut.
rozcietrzewiacz

2
Je crois que la plupart des variantes de recherche BSD nécessitent un argument de chemin tandis que dans GNU, il est facultatif. Des variations peuvent exister.
Caleb

2
Notez qu'au moins dans les spécifications standard POSIX 2008, pathest un argument requis pour trouver .
Caleb

1
Nit pick: "Vous pouvez remplacer ce [le point] par n'importe quel chemin que vous voulez" → "tous les chemins que vous voulez", puisque vous pouvez le dire find dir1 dir2 dir3 -name foo.txt.
G-Man dit `` Réintègre Monica ''

5

La version AIX de find, par exemple, nécessite le chemin d'accès et ne s'exécutera pas s'il n'est pas fourni.

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

Bien que certaines machines AIX puissent avoir une recherche GNU installée, qui peut s'adapter sans le chemin d'accès,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.