Existe uma maneira de verificar se há links simbólicos apontando para um diretório?

StackOverflow https://stackoverflow.com/questions/100170

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma pasta no meu servidor para o qual eu tinha um número de links simbólicos apontando. Eu já criou uma nova pasta e eu quero mudar todos esses links simbólicos para apontar para a nova pasta. Eu tinha considerado substituindo a pasta original com um link simbólico para a nova pasta, mas parece que se eu continuasse com essa prática poderia ficar muito confuso muito rápido.

O que eu tenho feito é mudar manualmente os links simbólicos para apontar para a nova pasta, mas pode ter perdido um casal.

Existe uma maneira de verificar se existem links simbólicos apontando para uma pasta específica?

Foi útil?

Solução

Eu usaria o comando find.

find . -lname /particular/folder

Isso irá recursivamente procurar o diretório atual para links simbólicos para /particular/folder. Note-se que só vai encontrar links simbólicos absolutos. Um comando semelhante pode ser usado para procurar por todos os links simbólicos apontando para objetos chamados "pasta":

find . -lname '*folder'

A partir daí você precisa eliminar quaisquer falsos positivos.

Outras dicas

Você pode auditar links simbólicos com o programa symlinks escrito por Mark Senhor - ele fará a varredura de um sistema de arquivos inteiro, caminhos normalize link simbólico para forma absoluta e imprimi-los na saída padrão.

Não há realmente nenhuma maneira direta para verificar se tais links simbólicos. Considere que você pode ter um sistema de arquivos que não está montado o tempo todo (ex. Uma unidade USB externa), o que poderia conter links simbólicos para outro volume no sistema.

Você poderia fazer algo com:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Faço notar que find do FreeBSD não suporta a opção -lname, que é por isso que eu acabei com o acima.

find . -type l -printf '%p -> %l\n'

Além de olhar para todas as outras pastas se existem links que apontam para a pasta original, eu não acho que isso é possível. Se for, eu estaria interessado.

find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;

Para hardlinks, você pode obter o inode do diretório com um dos "ls" opções (-i, eu acho).

Em seguida, um find com -inum irá localizar todos os hardlinks comuns.

Para softlinks, você pode ter que fazer um ls -l em todos os arquivos que procuram o texto após "->". E normalizando-lo para ter certeza que é um caminho absoluto

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top