Converta links simbólicos em arquivos de destino correspondentes [duplicados]

5

Eu tenho vários links simbólicos para outros arquivos em um diretório. Eu quero converter esses links em arquivos independentes.

Existe um comando que faz isso?

    
por Utkarsh Sinha 04.05.2012 / 19:07

4 respostas

8
cp --remove-destination "$(readlink <symlink>)" <symlink>
    
por 04.05.2012 / 19:30
1

Enquanto Ignacio é uma boa resposta, eu queria automatizar o processo para cada arquivo que é um link simbólico no diretório atual e subdiretórios.

Isso faz o truque:

encontre. -tipo l -exec cp \ "{} \" \ "{}. tmp $$ \" \; -exec mv \ "{}. tmp $$ \" \ "{} \" \;

Espero que isso ajude!

    
por 19.11.2012 / 23:56
0

A primeira maneira que me vem à mente é copiar todos os links para novos arquivos e, em seguida, excluir todos os links.

cp <link> <link>.new
rm <link>

Espero que os arquivos tenham algum tipo de estrutura de nomenclatura comum, para que você possa usar o curinga e executar os comandos apenas uma vez, caso contrário, talvez você queira escrever um script de shell simples

    
por 04.05.2012 / 19:20
0

FYI: O Mac OS X não suporta o sinalizador - remove-destination , por isso escrevi um script simples para colocar em seu diretório / usr / bin:

FILE=$1
TEMP=$1".tmp"

mv $FILE $TEMP

if [ -e $TEMP ]
then
    cp "$(readlink $TEMP)" $FILE

    if [ -f $FILE ]
    then
        rm $TEMP
    else
        echo "unln failed."
    fi
fi

Este permite usar curingas:

for FILE in "$@"
do
    TEMP=$FILE".tmp"

    if [ -h $FILE ]
    then
        mv $FILE $TEMP

        if [ -e $TEMP ]
        then
            cp "$(readlink $TEMP)" $FILE

            if [ -f $FILE ]
            then
                rm $TEMP
            else
                echo "unln failed for link: $FILE"
            fi
        fi
    fi
done
    
por 06.08.2014 / 23:00