Comando UNIX para desreferenciar um link simbólico?

6

Existe um comando UNIX para desreferenciar um link simbólico? Eu gostaria de substituir o link por uma cópia do arquivo para o qual ele aponta.

Exemplo:

$ ls
a
b -> a

$ deref b
$ ls 
a
b

Agora, a e b têm o mesmo conteúdo, mas são independentes um do outro. Minha pergunta é se existe um comando deref . Importante: não preciso saber para onde b aponta; o comando deve descobrir isso.

    
por dehmann 14.07.2011 / 21:05

4 respostas

10

Você pode usar readlink para descobrir o nome do arquivo, mas não precisa!

cp b c
mv c b

É simples assim. Se você está escrevendo um script para fazer isso, você deve usar a saída de mktemp em vez de c para garantir que você não substitua o arquivo já existente c .

    
por 14.07.2011 / 21:34
4

A combinação das duas respostas leva ao seguinte:

#!/bin/bash

if [ -h "$1" ] ; then
  target='readlink $1'
  rm "$1"
  cp "$target" "$1"
fi
    
por 14.07.2011 / 21:26
3

É possível copiar o que o link simbólico aponta para ...

veja readlink (1) e cp (1) . Atualizar : e enquanto você está nisso: readlink (2) .

MAS um link simbólico é apenas isso, um link simbólico (leia-se: por meio do nome do destino) para outro arquivo - ele não compartilha o conteúdo do outro arquivo. (link duro, alguém?).

    
por 14.07.2011 / 21:07
0

Não existe tal comando, mas você pode fazer o seguinte:

rm b
cp a b
    
por 14.07.2011 / 21:09

Tags