É possível criar links simbólicos que 'sigam' o arquivo?

7

Comportamento:

me@local: tree
.
|-- ba
|   '-- file.txt
|-- foo
|   '-- file.txt -> ba/file.txt
'-- foobar

agora, digamos que eu mova o arquivo.txt de ba para foobar :

me@local: mv ba/file.txt foobar/file.txt

Percebi que o link simbólico na pasta foo ainda aponta o caminho ba/file.txt .

Existe uma maneira de criar links simbólicos que atualizam automaticamente os caminhos quando o arquivo de origem é movido?

Ou links simbólicos que estão sendo excluídos quando eu excluo o arquivo de origem?

Vai ser ótimo.

    
por Strae 28.09.2010 / 11:57

3 respostas

10

Você pode criar links físicos.

Os links físicos têm suas próprias desvantagens, por exemplo, sem links para diretórios, sem links nos sistemas de arquivos. E eles não são excluídos quando você exclui o "original"; na verdade, eles impedem que o espaço da unidade seja liberado e você ainda pode acessar o conteúdo por meio do link físico.

Você não pode criar links físicos no navegador de arquivos (Nautilus), mas há um relatório de erros sobre isso.

    
por Mihai Capotă 28.09.2010 / 14:44
1

Não há como fazer isso com os sistemas de arquivos linux normais, tanto quanto eu saiba.

Os links simbólicos são, na verdade, apenas um bocado de texto que diz "olha, sou chamado de Foo" - não há como verificar se o Foo existe, como você descobriu. Você pode criar links simbólicos que apontam para nada com a mesma facilidade com que você pode criar links simbólicos que apontam para algo útil.

Talvez alguém com mais conhecimento de sistemas de arquivos diferentes de ext2 / 3/4 (como, por exemplo, jfs? ou zfs? ou zfs?) possa dizer se isso é possível em sistemas de arquivos mais avançados que ext2 / 3/4 . Talvez o NTFS possa suportar isso mesmo? O NTFS não tem links simbólicos como tal, mas há outra coisa um pouco semelhante (o nome do qual me escapa agora).

    
por Ben Williams 28.09.2010 / 14:12
1

Sim, você pode.

No shell, você deve digitar:

ln ba/file.txt foo/file.txt

este é um link strong, e se você mesmo deletar o arquivo em ba / file.txt, ele permanecerá em foo / file.txt (você pode ver quantos links existem com o comando ls -l

Se você quiser fazer o que você fez (criar um link simbólico), você deve digitar:

ln -s ba/file.txt foo/file.txt
    
por greuze 29.09.2010 / 13:19