Perché il punto in trova i comandi?


14

In genere, si vedono findcomandi che assomigliano a questo:

$ find . -name foo.txt

quando la ricerca deve iniziare dalla directory corrente. Sto scoprendo che sui miei computer (Ubuntu, Cygwin) ottengo gli stessi risultati senza il punto.

Perché è generalmente incluso? È solo una convenzione per essere espliciti o era / è richiesto su alcuni sistemi?

Risposte:


27

Alcune versioni * findrichiedono di fornire un argomento path che sia una directory da cui iniziare la ricerca. Il punto .rappresenta semplicemente la directory corrente in cui di solito si desidera cercare.

È possibile sostituire questo con qualsiasi percorso che si desidera essere la base della ricerca. In alcune versioni di find questo può essere lasciato perché la directory corrente è implicita se non è presente alcun argomento path.

È possibile eseguire man findnella shell per i dettagli sugli argomenti. Ad esempio, la sinossi di utilizzo per il mio indica che l'argomento path è facoltativo (all'interno del riquadro quadrato []):

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

Se avessi eseguito my findsenza argomenti, verranno restituiti tutti i file e le directory a partire dalla cartella corrente. Il tuo esempio afferma semplicemente che la ricerca dovrebbe iniziare da .e include l'espressione -name foo.txtcome uno dei filtri di ricerca.

* In particolare tutte le varianti di BSD e tutto ciò che si attiene rigorosamente allo standard POSIX . GNU find gli permette di essere opzionale.


1
Sai a mano quali versioni di find lo richiedono? O dove potrei cercare di indagare ulteriormente? (trovare è difficile da google)
Eric Wilson

Cosa interessante sul percorso di ricerca predefinito.
rozcietrzewiacz,

2
Credo che la maggior parte delle varianti di BSD find richieda un argomento path mentre in GNU lo trova opzionale. Possono esistere variazioni.
Caleb,

2
Si noti che almeno nelle specifiche standard POSIX 2008, pathè necessario trovare un argomento .
Caleb,

1
Nit pick: "Potresti sostituire questo [punto] con qualsiasi percorso tu voglia" → "qualsiasi percorso tu voglia", dato che puoi dire find dir1 dir2 dir3 -name foo.txt.
G-Man dice "Ripristina Monica" l'

5

La versione AIX di find, ad esempio, richiede il percorso e non verrà eseguita se non ne viene fornita una.

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

Sebbene alcune macchine AIX possano avere un GNU find installato, che può farcela senza il percorso,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.