Perché i risultati del comando find differiscono quando il percorso è. e quando è ./*?

Aug 30 2020

Quando digito find . -name "so*"ottengo tutti questi risultati:

./sort
./.cache/evolution/sources
./.config/evolution/sources
./.local/share/sounds 

Ma quando scrivo find ./* -name "so*"ottengo solo ./sort.

Da quello che so quando uso .nel comando chiedo di trovare i file che iniziano con "così" nella mia directory corrente, ma quando lo uso ./*mostra solo il ./sortfile e non mostra i file nascosti, quindi mi chiedo cosa l'aggiunta /*effettivamente fa e come cambia la mia query / istruzione.

Risposte

1 MartinThornton Aug 30 2020 at 18:33

find . significa ricerca dalla directory corrente.

find ./*significa cercare da tutti i file e le directory nella directory corrente che corrispondono a un file *.

Tuttavia, *è espanso dalla shell, quindi findpensa che tu abbia davvero digitato un comando come:

find ./sort ./another-dir ./another-file ./etc -name "so*"

La tua osservazione è corretta. Per impostazione predefinita, un'interlinea *esclude file o directory che iniziano con a ., quindi non vengono nemmeno visti da find. Non si tratta solo di file nascosti, ma anche delle directory corrente e principale, quindi di .*solito non è una buona idea!