Removendo link soft link no Unix

1

atualmente estou querendo limpar minha área proj, mas o problema com rm estou enfrentando é alguma cópia permanecer no disco
com link eu estou significando link suave

A linked to B 
 B linked to C

C que está em outro diretório A & B estão na mesma pasta

saiba quando eu corro

rm -rf A 

remove somente A & B, mas o C permanece no disco como eu posso remover C do disco .. usando o mesmo comando ..

    
por Black Diamond 02.09.2010 / 12:35

2 respostas

1

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
    
por 13.02.2011 / 00:50
0

Você pode tentar

rm -fr 'readlink B'

mas isso funcionará com B , pois removerá seu destino C , mas não com A , porque só removerá B ( A da meta).

mas isso pode ser feito facilmente através de um script que irá seguir links de forma recursiva até que eles recebam um não link, então passem para rm -fr

    
por 02.09.2010 / 12:49