Como encontrar e listar todos os links simbólicos criados para um arquivo específico?

52

Eu havia criado muitos links simbólicos em vários caminhos para um arquivo ou diretório específico. Quero a lista inteira de caminhos de links simbólicos criados (local).

Exemplo:

Criei links simbólicos para o ~/Picturesdiretório em muitos diretórios. Como listar todos os links simbólicos para esse ~/Picturesdiretório?

Isso é possível? Se sim, então como?

Avinash Raj
fonte
Você precisa pesquisar exaustivamente, não há contagem armazenada como nos links físicos. Veja uma das respostas usando find.
ctrl-alt-Delor

Respostas:

42

Aqui está um exemplo:

find -L /dir/to/start -xtype l -samefile ~/Pictures

ou talvez melhor:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

para se livrar de alguns erros como Permission denied, Too many levels of symbolic linksou File system loop detectedo que findeles joga quando não tem as permissões adequadas ou outras situações.

  • -L - Siga links simbólicos.

  • -xtype l - O arquivo é um link simbólico

  • -samefile name- Arquivo refere-se ao mesmo inode que name. Quando -Lestá em vigor, isso pode incluir links simbólicos.

Notas:

  • Use L minúsculo -xtype l, não o dígito 1.
  • No macOS / Darwin, -xtypeé -type.
Radu Rădeanu
fonte
O comando pode ser modificado para encontrar o link simbólico que contém um caminho? por exemplo, arquivos em todo o sistema que podem ser vinculados a ~ / Pictures / A, ~ / Pictures / A / B / C ou qualquer arquivo nos subdiretórios ~ ~ / Pictures>
bloqueados pela neve em
7

Muito simples, use a opção -lname:

find / -lname /path/to/original/dir

De man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Nota : Lembre-se de que os links simbólicos podem estar em qualquer lugar, o que inclui um sistema remoto (se você estiver compartilhando arquivos); portanto, talvez não seja possível localizá-los todos.

Abdennour TOUMI
fonte
Note-se também, se o link simbólico é um caminho relativo, como ../dir, então não vai encontrar o absoluto /path/to/original/direm vez disso você pode usar um padrão e eliminar falsos positivos-lname \*dir
Jason S
2

Tente o seguinte:

ls -i ~/

277566 Pictures

find . -follow -inum 277566(encontre diretórios com o mesmo número de inode )

Ele exibirá todos os seus caminhos de links simbólicos.

nux
fonte
4
Isso encontrará links físicos, não simbólicos. Links físicos compartilham números de inode. links simbólicos têm números de inode diferentes. o inode de um link simbólico possui um caminho em vez de uma lista de bloqueios.
Hildred 4/03/14
a questão não mencionou duro ou mole link simbólico
nux