¿Cómo volver a vincular estos enlaces simbólicos después de mover el sistema?


3

Moví mi sistema de archivos y enlaces simbólicos de Ubuntu 14.04 a 16.04 usando la tarjeta de memoria FAT32, que aparentemente rompió esos enlaces; dejó de usar BitTorrentSync. La condición diferencial es que esos enlaces son restos de mi instalación de OSX debido a XSym. Lo hago ls -la $HOME | grep Mathpor un enlace simbólico

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

qué contenidos en el editor de texto

XSym
0078
48055bd2d9c13568c969e1eb8d6a22ac
/Users/masi/Math/

Debería señalar en su /Users/masi/LOREM/Math/lugar. Simplemente corregir manualmente la RUTA no funciona, ya que el enlace permanece muerto. El comando de Gilles también puede ser aplicable aquí:

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

donde no estoy seguro si obtuve el origen y el destino en el orden correcto.

Sistemas: Ubuntu 14.04, Ubuntu 16.04


2
Eso no parece ser un enlace simbólico normal. (Esos se ven así:) lrwxr-xr-x 1 itvirta staff 6 Jun 13 15:39 testlink -> foobar. El archivo de texto parece coincidir con una descripción de cómo Mac OS X guarda enlaces simbólicos en sistemas de archivos DOS / FAT. No creo que Linux sea compatible con aquellos en sistemas de archivos vfat, y de lo contrario tendría enlaces simbólicos nativos reales. (A menos que algunos entornos de escritorio utilicen archivos de texto especiales como "enlaces" (?))
ilkkachu

Entonces, si no es un enlace simbólico real, las herramientas habituales ( find -lnamey readlink) no lo encontrarán. Además, no puedo decir si necesita cambiarlos a enlaces simbólicos regulares o editar en ese formato.
ilkkachu

1
¿Por qué no simplemente agregar un nuevo enlace ln -s Math /users/masi/Mathematicspara que todos los nombres de ruta que comienzan con /Users/masi/Mathematicsse resuelvan automáticamente al reemplazar ese prefijo con /Users/masi/Math?
Ralph Rönnquist

@ RalphRönnquist Lo siento, cambié los nombres por claridad porque me confundí. Entonces quieres decir, ln -s $HOME/Math/ $HOME/LOREM/Math/es decir, crear un nuevo enlace simbólico. Sí, eso es un reemplazo de un enlace antiguo por uno nuevo. Tengo muchos enlaces, etc. Física, química, ... de manera similar. Estoy pensando cómo podría manejarlo en la práctica. El reemplazo manual puede ser la única forma de hacerlo aquí. Sin embargo, no es lo que me gustaría tener. Me gustaría tener un monitoreo continuo sobre esos enlaces y sugerencias para solucionarlos. Mis sistemas se rompen con frecuencia y son grandes. Manual significa trabajo.
Léo Léopold Hertz 준영

1
@ Masi No creo que Ubuntu haya creado estos archivos XSym (o incluso puede crearlos). Además, la ruta de destino de su ejemplo (/ Users / masi / Math /) no sería una ruta de destino válida en Ubuntu - / Users es MacOS, en Ubuntu sería / home.
Martin von Wittich

Respuestas:


2

Dos posibles soluciones que te vienen a la mente.

1. Iterar en todos los directorios LOREMy vincularlos simbólicamente a$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

Puede colocar el prefijo rmy lncon echo(p echo rm -f "Users/masi/$item". Ej. ) Para ver el efecto del script antes de que realice algún cambio.

2. Procese el conjunto de archivos existentes y conviértalos a enlaces simbólicos adecuados

Este necesitará algunas heurísticas (conjeturas), porque no hay nada concreto que identifique un enlace de archivo que debería ser un enlace simbólico.

Algo como esto podría 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

Nuevamente, puede anteponer las declaraciones mvy lncon echopara ver el efecto sin aplicar ningún cambio.


1
@Masi el segundo script lee el contenido de los archivos según lo descrito por usted en su pregunta. Se adhieren echoal frente de las mvy los lncomandos y darle torbellino. Si no analizan los archivos que no son realmente enlaces simbólicos, consígueme uno real y veré qué puedo hacer.
roaima

@roiama Estoy tratando de entender la gravedad de esas XSymcosas. Puedo encontrar coincidencias de ellos en todo mi sistema. XSym probable también significa otras cosas además de enlaces simbólicos.
Léo Léopold Hertz 준영

@ Masi, nunca me he encontrado con estos XSymarchivos antes. Los describiste como enlaces simbólicos. No son enlaces simbólicos Unix / Linux, pero parece que, según los comentarios de otras personas, podrían ser algo que produce una Mac (como "accesos directos" de Windows, que quizás no sean enlaces simbólicos). Si son archivos legibles y están en un sistema de archivos que puede usar enlaces simbólicos adecuados, mi código está destinado a poder leerlos y reemplazarlos con los enlaces simbólicos equivalentes según mi comprensión de su pregunta.
roaima

¿Puede dar un ejemplo de la salida de un enlace simbólico que hace su archivo, por favor?
Léo Léopold Hertz 준영

1
@ Masi, ponga echodelante de los comandos mvy lnpara que se conviertan en no-ops, y ejecute cualquiera de los scripts directamente en su sistema. Eso le dará resultados de primera mano que puede retroalimentar según sea necesario. Te he ofrecido una respuesta; por favor pruebalo.
roaima
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.