Com o comando:
ls -la *
Posso listar todos os meus links simbólicos.
Como posso remover todos os links simbólicos que estão vinculados a uma pasta especial?
Por exemplo:
No meu diretório usr/local/bin
Eu tenho as seguintes entradas:
lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara
Agora quero remover todos os links com o caminho /usr/local/texlive/
Comentários
- Você quer dizer remover todos os links simbólicos vinculados a uma pasta de destino? Ou mover todos os links simbólicos encontrados para uma pasta específica?
- @uther: quero dizer, removendo os links.
Resposta
Certifique-se de ler a resposta alternativa . É ainda mais direto ao ponto, embora não tenha votado tão alto neste momento.
Você pode usar isso para excluir todos os links simbólicos:
find -type l -delete
com versões find
modernas.
Em versões de localização mais antigas, pode ter que ser:
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
Para limitar a um determinado destino de link, presumindo que nenhum dos caminhos contenha qualquer caractere de nova linha:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
ou formatado bem
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
O if
também poderia incluir uma condição mais complexa, como a correspondência de um padrão com grep
.
Feito sob medida para o seu caso:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
ou formatado bem:
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
Comentários
- Este comando remove todos os links simbólicos? Por favor, veja minha edição acima.
- @ Marco: sim, as três primeiras linhas seriam. Editando mais 🙂
- Eu também adicionaria um
-print
no final do
comando para obter algum feedback visual.
Resposta
Com um find
moderno que suporta -lname
:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
deve servir .
Comentários
- Essa é uma solução excelente e simples. Eu testei e funciona como um encanto. Obrigado
- Presumivelmente, deve ser
find /usr/local/bin
- Nem mesmo moderno, necessariamente. GNU
find
teve-lname
por mais tempo do que eu tenho mantido (desde cerca de 2003). - @JamesYoungman: Obrigado! Por moderno
find
eu realmente quis dizer GNUfind
. 😉 Useiusr/local/bin
, porque isso ' é o que o OP usou.
Resposta
A find
solução é ótima.
Apenas no caso de sua descoberta não suporte -lname
, aqui está outra maneira que usa apenas shell e readlink
.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
Resposta
Com zsh
:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
resolve totalmente o caminho para um sem links simbólicos, então assumindo que /usr/local/texlive
é livre de links simbólicos. , removeria todos os arquivos que, após a resolução do link simbólico, residem em /usr/local/textlive
que incluiria links para /usr/local/texlive/foo
, mas também para ../texlive/bar
ou para /usr/./local/texlive/whatever
ou /some/other/symlink
que é um link simbólico apontando para /usr/local/texlive
, etc.
Resposta
Vá para o caminho seu e defina você mesmo a configuração do caminho
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
Comentários
- Como esses são caminhos como
usr/local/bin
quegrep
está procurando,grep -E
é o caminho a percorrer. Caso contrário, não haveria resultados correspondentes. Além disso,h
emls
não ' serve a qualquer propósito aqui!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
. Para obter mais informações, consulteman ls
ouman grep
Resposta
sudo unlink /path/of/your/package
É isso
Comentários
- Como isso remove todos os links simbólicos que apontam para destinos abaixo do caminho fornecido? Observe que a pergunta pergunta sobre a remoção dos links simbólicos em um diretório específico que aponta para destinos em algum outro diretório.