Aparentemente, não tenho permissão para comentar, então aqui como resposta:
Como a
é o link,
precisamos da opção recursiva no diretório não referenciado ...
rm -rf "$(readlink -f "a")"; rm -f "a"
Digamos que a
é um link simbólico para b
. Eu estou procurando um comando simples para remover a
e b
de uma só vez que não exige que eu saiba sobre b
.
Minha solução atual é
rm -rf "$(readlink -f "a")"; rm -f "a"
Mas talvez haja algo mais fácil?
Alguns sistemas cancelarão o link simbólico quando você adicionar uma barra final (pelo menos se o link simbólico apontar para um diretório):
mkdir -p b/c && touch b/c/foo && ln -s b/c a
rm -rf a/ && rm -f a
# removed "b/c" and "a"
O padrão POSIX mudou um pouco (consulte a Resolução do nome do caminho em IEEE Std 1003.1, edição de 2004 vs. IEEE Std 1003.1-2008 ), mas parece que o comportamento para um nome de caminho com uma barra final e um componente de nome de caminho final que é um link simbólico é (principalmente) o mesmo: o link simbólico é resolvido.
Nem todos os sistemas implementam esse comportamento (veja o comentário de Gilles).