Como vincular novamente estes links simbólicos depois de mover o sistema?

3

Mudei meu sistema de arquivos e links simbólicos do Ubuntu 14.04 para o 16.04 usando o cartão de memória FAT32, que aparentemente quebrou esses links; parou de usar o BitTorrentSync. Condição diferencial é que esses links são remanescentes da minha instalação OSX por causa do XSym. Eu faço ls -la $HOME | grep Math para um symlink

-rw-r--r--  1 masi masi   1067 May 17 21:28 Math

qual conteúdo no editor de texto

XSym
0078
48055bd2d9c13568c969e1eb8d6a22ac
/Users/masi/Math/

Deve apontar para /Users/masi/LOREM/Math/ . Apenas corrigindo manualmente o PATH não funciona, já que o link fica com a morte. O comando de Gilles também pode ser aplicado aqui:

find /Users/masi/Math/ /
    -lname '/Users/masi/LOREM/Math/*' \ 
    -exec sh -c 'ln -snf "/mnt$(readlink "$0")" "$0"' {} \;

onde não tenho certeza se recebi a origem e o destino na ordem correta.

Sistemas: Ubuntu 14.04, Ubuntu 16.04

    
por Léo Léopold Hertz 준영 09.06.2016 / 11:37

1 resposta

2

Duas soluções possíveis que vêm à mente.

1. Itere em todos os diretórios em LOREM e crie links simbólicos para $HOME

cd "$HOME/LOREM"
for item in *
do
    test -d "$item" || continue
    mv -f "$HOME/$item" "$HOME/$item.DELETE_ME_LATER" 2>/dev/null
    ln -s "$HOME/LOREM/$item" "$HOME/$item"
done

# Once you are happy that only the correct files have been replaced
# rm "$HOME"/*.DELETE_ME_LATER

Você pode colocar o prefixo rm e ln com echo (por exemplo, echo rm -f "Users/masi/$item" ) para ver o efeito do script antes de fazer qualquer alteração

2. Processe o conjunto de arquivos existentes e converta-os em links simbólicos apropriados

Este vai precisar de alguma heurística (adivinhação), porque não há nada concreto que identifique um arquivo que deveria ser um link simbólico.

Algo parecido com isso pode funcionar

for file in *
do
    # Skip files that we have already processed
    [[ $file =~ DELETE_ME_LATER ]] && continue

    # Look for a path-like string in the file
    path=$(grep "^$HOME/" "$file")
    if test -d "$path"
    then
        # It is a directory
        mv -f "$file" "$file.DELETE_ME_LATER"
        ln -s "$HOME/LOREM/$file" "$file"
    fi
done

# Once you are happy that only the correct files have been replaced
# rm *.DELETE_ME_LATER

Novamente, você pode prefixar as instruções mv e ln com echo para ver o efeito sem aplicar nenhuma alteração.

    
por 14.06.2016 / 10:04

Tags