encontre uso com -L

34

eu tenho

link -> file

eu faço

find -L . -name 'link'

E pegue

./link

Por que é que?

homem encontrar diz:

-L: Siga os links simbólicos. Quando localizar examina ou imprime informações sobre arquivos, as informações usadas devem ser obtidas das propriedades do arquivo para as quais o link aponta, e não do próprio link (a menos que seja um link simbólico quebrado ou que a localização não consiga examinar o arquivo para o qual o link aponta).

Ankur Agarwal
fonte

Respostas:

12

Com -L, ele examina as propriedades do arquivo - conteúdo ou metadados, não as do link. Por exemplo, se você usar -atime, ele verificará atimeo arquivo, não o link:

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

testdir/linkfoi criado depois testdir/ref, mas o arquivo para o qual aponta não era.

Kevin
fonte
11
Você pode explicar o meu exemplo? O que eu entendo é o seguinte: No meu exemplo, find inicia sua pesquisa. Ele encontra ./link, já que -L é, na verdade, desreferencia-o e pega as propriedades de ./file. Ele compara o nome de ./arquivo com o padrão 'link' e, como não corresponde, não deve reportar nenhuma O / P. O que há de errado com o meu raciocínio?
Ankur Agarwal
No manual de localização que você citou, "as informações utilizadas serão retiradas das propriedades do arquivo para o qual o link aponta". O nome de um arquivo não é uma de suas propriedades, portanto, ele ainda usa o nome do link. Isso também é muito mais útil que o nome do arquivo real.
Kevin
"O nome do arquivo não é uma de suas propriedades" Eu não sabia disso. Existem outros atributos de arquivos que não são considerados propriedades? Para ser sincero, ainda sou cético e esperaria o que os outros têm a dizer.
Ankur Agarwal
O mesmo que @abc, não sabia que um nome de arquivo não é uma propriedade de arquivo. Onde posso encontrar essa informação em qualquer documentação e / ou página de manual? Por favor, consulte onde posso aprender mais sobre as propriedades de um arquivo.
Joker #
34

A regra geral é que, se um comando opera em links (ou seja, entradas de diretório, que são ponteiros para inodes), o comando trata os links simbólicos como eles mesmos e não como o objeto para o qual o link aponta. Caso contrário, o comando opera para o que o link simbólico aponta. Assim, cpsegue os links simbólicos por padrão e copia o conteúdo do arquivo apontado pelo link. Mas quando você pede cppara lidar com as entradas do diretório especificando -R, ele para de seguir os links simbólicos. mvsempre funciona com entradas de diretório e, portanto, nunca segue links simbólicos.

A findatividade normal do comando é operar nas entradas do diretório, para que os links simbólicos não sejam seguidos por padrão. Adicionar -Lcausas findpara seguir links simbólicos para todas as propriedades, exceto aquela que não pode ser ignorada ao fazer a pesquisa de diretório, o nome. Um dos objetivos de find -nameé fornecer entrada para comandos como mve rm, que operam nas entradas de diretório. Haveria resultados desagradáveis ​​e surpreendentes se find -L dir -namepudesse produzir nomes que apontassem para fora da árvore de diretórios enraizados em dir.

Kyle Jones
fonte
UAU! Por que esse conceito sutil não é bem ilustrado nas páginas de manual (a menos que eu tenha perdido)? Esta é uma grande surpresa para mim.
Ankur Agarwal
2
@Kyle Jones There would be unpleasant and surprising results if find -L dir -name` pode produzir nomes que apontam para fora da árvore de diretórios enraizados em dir.` => não deveria ser: seria desagradável ... se find dir -name pattern...? porque a adição -L permite apontando para dir fora
timotheecour
Então, como cp -Rcopiar coisas sob um link simbólico?
javadba 21/06