Diferença entre find ~ e find *

4

Qual é a diferença entre find * e find ~ para pesquisar um arquivo? No terminal quando meu atual diretório de trabalho em root , então no terminal

root@devils-ey3:~# find * -print -quit
~

No mesmo diretório

root@devils-ey3:~# find ~ -print -quit
/root

Mas se eu alterar o pwd , a saída de find ~ -print -quit será a mesma de antes, mas a outra será alterada. Qual é o propósito de trabalho de * e ~ para o arquivo find?

    
por Mastan 16.06.2015 / 12:31

2 respostas

8

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.

    
por 16.06.2015 / 13:17
0

Antes de mais nada, tenha em mente a sintaxe de find : -

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

What is the difference between find * and find ~ for searching a file?

  • * é um cartão que corresponde a tudo.

    Aqui find * passa a lista de arquivos / dirs no diretório atual e aqueles como nomes de destino a serem pesquisados. então, ele encontrará todos os arquivos com o mesmo nome daqueles em pwd

    (graças a @terdon por explicando o que 'encontrar *' faz; veja que resposta)

  • ~ usado para $HOME Diretório.

    Portanto, find ~ encontra arquivos e diretório (recursivamente) em ~ (diretório inicial)

root@devils-ey3:~# find * -print -quit
~

Deve haver um arquivo ou diretório chamado ~ dentro de /root , que é o caso acima da saída. ( não confunda com ~ como $HOME directory )

root@devils-ey3:~# find ~ -print -quit
/root

Explicação para find ~ -print -quit : -

Opção considerável: -quit :

-quit  Exit  immediately.  No child processes will be left running, but no more paths specified on the command
              line will be processed.  For example, find /tmp/foo /tmp/bar -print -quit  will  print  only  /tmp/foo.
              Any  command  lines  which have been built up with -execdir ... {} + will be invoked before find exits.
              The exit status may or may not be zero, depending on whether an error has already occurred.
  1. ~ é considerado um caminho, por exemplo, /root , porque você está no terminal raiz.
  2. -quit imprime apenas o nome do diretório

But if I change the pwd then the output of find ~ -print -quit is same as before...

Como explicado acima: - find ~ -print -quit imprime /root todas as vezes que o caminho é definido como ~ (que é /root devido ao shell raiz ) e usou -quite . (independente de pwd !)

    
por 16.06.2015 / 12:41