Localizando todos os links simbólicos e físicos para um arquivo no UNIX

9

Se eu tiver um arquivo específico em um sistema de arquivos UNIX, existe uma maneira de usar o bash para encontrar todos os links para esse arquivo, simbólicos e físicos? Se eu precisar de comandos diferentes para cada um, quais são eles?

colin.t.welch
fonte

Respostas:

8

Tente isso com o GNU find:

find /start/dir -L -samefile /file/to/check -exec ls -li {} \;

Exemplo de saída:

1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1

Você pode usar em -lsvez de, -execmas ele mostrará o inode e outras informações do arquivo de destino, em vez dos arquivos individuais.

Pausado até novo aviso.
fonte
Esta saída está mostrando links físicos e sym? Links Sym indicados por -> arrow?
aaaidan
@aaaidan: Sim, está correto. O número de inode x1 e x2 são os mesmos, indicando que são links físicos. A seta indica um link simbólico. Usar -Le -samefilefaz com que ambos sejam listados. Se você omitir -L, os links simbólicos não serão seguidos (consulte man find).
Pausado até novo aviso.
2

Se você não possui o GNU Find, pode fazer o seguinte:

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"

Mas não funcionará para links simbólicos.

Ollie Saunders
fonte
11
Oh, eu vejo agora que esta questão já responde a esta: superuser.com/questions/12972/to-see-hardlinks-by-ls
Ollie Saunders