Você pode usar realpath
da seguinte forma:
rm $(realpath A)
Configurando um exemplo:
$ cd $(mktemp -d)
$ pwd
/tmp/tmp.QwSuHKmWwE
$ touch C
$ ln -s C B
$ ln -s B A
$ stat -c "%N" *
'A' -> 'B'
'B' -> 'C'
'C'
Mostrando que realpath
faz o que você quer:
$ realpath A
/tmp/tmp.QwSuHKmWwE/C
Portanto, executar rm $(realpath A)
é como executar rm C
.
$ rm $(realpath A)
$ stat -c "%N" *
'A' -> 'B'
'B' -> 'C'
Ou você deseja remover todos os três arquivos?
Nesse caso, acho que você terá que escrever um script.
Aqui está algo que deve fazer o trabalho:
#!/bin/bash
if test $# -eq 0; then
echo "Usage: dellinks.sh <file>..." 1>&2
exit 2
fi
if ! type readlink >/dev/null 2>&1; then
echo "dellinks.sh: cannot find readlink program" 1>&2
exit 1
fi
for file in "$@"; do
while test -L "$file"; do
target="$(readlink "$file")"
rm "$file"
file="$target"
done
if test -e "$file"; then
rm "$file"
fi
done
Exemplo:
$ stat -c "%N" *
'A' -> 'B'
'B' -> 'C'
'C'
$ ~/bin/dellinks.sh
Usage: dellinks.sh <file>...
$ ~/bin/dellinks.sh A
$ stat -c "%N" *
stat: cannot stat '*': No such file or directory