Olá a todos, preciso fazer isso no Linux:
- Dado: nome do arquivo 'foo.txt'
- Encontrar: todos os arquivos que são links simbólicos para 'foo.txt'
Como fazer isso? Obrigado!
Olá a todos, preciso fazer isso no Linux:
Como fazer isso? Obrigado!
Respostas:
Depende, se você está tentando encontrar links para um arquivo específico chamado, foo.txt,
então esta é a única boa maneira:
find -L / -samefile path/to/foo.txt
Por outro lado, se você está apenas tentando encontrar links para qualquer arquivo que tenha um nome foo.txt
, algo como
find / -lname foo.txt
ou
find . -lname \*foo.txt # ignore leading pathname components
-xtype l
para encontrar apenas links simbólicos de lista
find . -lname '*foo.dir*'
(corresponde, por exemplo file.txt -> ../foo.dir/file.txt
)
Encontre o número de inode do arquivo e pesquise todos os arquivos com o mesmo número de inode:
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
Alternativamente, tente a lname
opção de find
, mas isso não funcionará se você tiver links simbólicos relativos, por exemploa -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefile
opção com -L
para o mesmo efeito, sem ter que procurar o inode você mesmo
foo
for um diretório, use ln -di
em uma linha:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Eu prefiro usar o symlinks
utilitário, que também é útil ao pesquisar links simbólicos corrompidos. Instalar por:
sudo apt install symlinks
Mostrar todos os links simbólicos na pasta e subpastas atuais:
symlinks -rv .
-r
: recursivo-v
: verboso (mostra todos os links simbólicos, não apenas os corrompidos)Para encontrar um link simbólico específico, basta grep
:
symlinks -rv . | grep foo.txt