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?
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?
Respostas:
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 -ls
vez de, -exec
mas ele mostrará o inode e outras informações do arquivo de destino, em vez dos arquivos individuais.
-L
e -samefile
faz com que ambos sejam listados. Se você omitir -L
, os links simbólicos não serão seguidos (consulte man find
).
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.