O formato básico de find
é
find WHERE WHAT
Portanto, em find *
, o *
é considerado como WHERE
. Agora, *
é um curinga. Ele corresponde a tudo no diretório atual (exceto, por padrão, arquivos / diretórios que começam com .
). O equivalente do Windows é *.*
. Isso significa que *
é expandido para todos os arquivos e diretórios em seu diretório atual antes de ser passado para find
. Para ilustrar, considere este diretório:
$ ls
file file2
Se executarmos set -x
para ativar as informações de depuração e, em seguida, executar o comando find
, veremos:
$ find * -print -quit
+ find file file2 -print -quit
file
Como você pode ver acima, o *
é expandido para todos os arquivos no diretório e o que é realmente executado é
find file file2 -print -quit
Por causa de -quit
, isso imprime o primeiro nome de arquivo dos que você pediu para procurar e sair. No seu caso, você parece ter um arquivo ou diretório chamado ~
, de modo que é aquele que é impresso.
O til ( ~
), no entanto, também tem um significado especial. É um atalho para o diretório $HOME
:
$ echo ~
/home/terdon
Então, quando você executa find ~
, como root, o ~
é expandido para /home/root
e o comando que você executa é realmente:
# find ~ -print -quit
+ find /root -print -quit
/root
Mais uma vez, você está dizendo find
para procurar por arquivos ou diretórios em um local específico e sair depois de imprimir o primeiro. Como o primeiro arquivo ou diretório correspondente a /root
é ele mesmo, é o que é impresso.