Como obter todos os hardlinks para os mesmos dados?

0

Tem vários hardlinks para o mesmo arquivo.
Como (por exemplo) por um arquivo (hardlink) obter os outros apontando para os mesmos dados?
Nenhuma tarefa real. Apenas interessante. Pode ser útil.

    
por Sergey 22.06.2011 / 10:55

2 respostas

2

A maioria dos sistemas de arquivos não mantém um diretório de onde os hardlinks para um arquivo (ou mais precisamente, para um indodo) são.

Então você terá que escanear todo o sistema de arquivos para encontrar todos os hardlinks. Você pode fazer isso usando find -inum <inode number> .

Exemplo:

Criar arquivo com link:

$ ~> mkdir linktest
$ ~> cd linktest/
$ ~/linktest> touch file1
$ ~/linktest> ln file1 file2

Verifique inodes:

$ ~/linktest> stat file*
  File: file1
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d      Inode: 37          Links: 2
[...]
  File: file2
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d      Inode: 37          Links: 2
[...]

Como você pode ver, ambas as entradas do arquivo têm o mesmo inode (37) - porque são hardlinks para os mesmos dados.

Encontrar pelo número do inode:

$ ~/linktest> find -inum 37
./file1
./file2

Isso está no Linux, mas deve funcionar da mesma forma no * BSD.

    
por 22.06.2011 / 11:29
2

find tem uma opção -samefile para isso:

find / -xdev -samefile /myfile

Substitua / pela raiz do sistema de arquivos em que myfile está - por exemplo, se você usou /home/sergey/myfile e tiver /home em um sistema de arquivos separado, use find /home .

    
por 22.06.2011 / 11:40