Como desassociar o arquivo symlinked a si mesmo sem destruir

6

Não sei como isso aconteceu, mas tenho vários arquivos que se tornaram links simbólicos para eles mesmos. Parece provável que não haverá maneira de restaurar os arquivos, mas esperamos que sim. Aqui está o que ls -l diz

    lrwxrwxrwx  1 bob users   50 Sep  9 21:45 background.png -> /path/to/background.png

Eu tentei desvincular um dos arquivos, mas infelizmente o arquivo desapareceu. Eu também tentei readlink. Readlink diz que o caminho para o arquivo é /path/to/background.png

Como eu disse, eu realmente não sei como isso aconteceu. Estou herdando todos esses arquivos de um administrador anterior. Existe algum recurso?

    
por pocketg99 10.09.2016 / 04:32

2 respostas

15

Se um arquivo é linkado a si mesmo, então não há dados presentes e qualquer tentativa de acessá-lo resultará em um loop e, por fim, em um erro

por exemplo

$ ls -l myfile 
lrwxrwxrwx 1 sweh sweh 19 Sep  9 22:38 myfile -> /path/to/here/myfile

$ cat myfile 
cat: myfile: Too many levels of symbolic links

Como não há dados, a exclusão desses links simbólicos não perderá dados, porque <<> não há dados para preservar.

Se você não obtiver o erro Too many levels of symbolic links ao tentar cat do arquivo, o arquivo não será um link para ele mesmo.

    
por 10.09.2016 / 04:41
3

ln nunca sobrescreve um arquivo com um link para si mesmo. Você pode obter um arquivo vinculado a si mesmo com:

$ ln -s 'pwd'/myfile myfile
$ ls -l myfile
lrwxrwxrwx 1 grochmal users 25 Sep 10 03:41 myfile -> /home/grochmal/tmp/myfile

Mas se você tentar com um arquivo que contenha dados:

$ rm -f myfile
$ echo yay > myfile
$ ln -sf 'pwd'/myfile myfile
ln: '/home/grochmal/tmp/myfile' and 'myfile' are the same file

ln , por outro lado, sobrescreverá um arquivo com um link para outro arquivo.

No entanto, você pode ter certeza de que um link para si mesmo é um arquivo que nunca teve dados (ou foi explicitamente excluído antes da criação do link).

(no Linux e usando ln de coreutils , isto é)

    
por 10.09.2016 / 04:48