GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo copiar un archivo de enlace simbólico de Linux a Windows y luego volver a Linux pero aún manteniéndolo como un enlace simbólico

En *nix, un enlace simbólico suele ser solo un archivo de texto sin formato con un atributo de "enlace simbólico". El archivo contiene la ruta al destino del vínculo. El atributo "enlace simbólico" no existe en Windows. Entonces, cuando extrae el enlace simbólico en Windows, se convierte en un archivo de texto normal [aunque también puede generar un error, puede depender de la herramienta que use para extraer el archivo]. Cuando se vuelve a copiar a *nix, sigue siendo un archivo de texto normal.

La única solución sería mantener el atributo "enlace simbólico" en algún almacén de metadatos externo y restaurar el atributo al cargar el archivo o crear el archivo.

Aunque no conozco ninguna herramienta que admita esto.

Definitivamente puedes codificar esto.

  1. Uso de WinSCP :Haces un código que genera un script WinSCP. El código iteraría recursivamente una estructura de directorio local. Para un archivo generará el put Comando para subirlo. Para un enlace simbólico generará el ln comando para crear un enlace simbólico. Para distinguir el enlace simbólico, tal vez pueda usar solo una heurística simple (enlace simbólico =un archivo de texto corto de una línea con barras). Una forma adecuada sería recordar el atributo de enlace simbólico del archivo al extraer el archivo (pero también tendría que codificar la extracción usted mismo, vea también una sugerencia a continuación).

  2. Uso del archivo :Recientemente implementé esto para un archivo ZIP. (Incluso en Windows) Puede usar el método PHP ZipArchive::setExternalAttributes para marcar un archivo archivado como un enlace simbólico. Tenga en cuenta que la función está disponible solo desde PHP 5.6.

    Código de ejemplo:

    $symlink = true; // is symlink?
    $dir = false; // is folder?
    $mode = "755"; // permissions
    
    $local_path = "C:\\zip\\folder\\mylink";
    $zip_path = "folder/mylink";
    
    $attr = 
        (1 << 14) | // this bit seems to be always set
        (1 << ($dir ? 30 : 31)) |
        ($symlink ? (1 << 29) : 0) |
        octdec($mode) << 16;
    
    $zip->addFile($local_path, $zip_path);
    $zip->setExternalAttributesName($zip_path, ZipArchive::OPSYS_UNIX, $attr);
    

    Si está más familiarizado con Python, consulte ¿Cómo configuro permisos (atributos) en un archivo en un archivo ZIP usando el módulo zipfile de Python? Solo se ocupa de los permisos, pero puede extenderlo fácilmente con el bit de enlace simbólico, según mi ejemplo de PHP.


Intentaría mantener el archivo de enlace dentro del archivo gzip (o tar.gz), y solo lo extraería en otro sistema Linux. Sé que Windows generalmente no maneja bien los atributos y permisos de los archivos de Linux, y extraer el enlace en Windows probablemente lo cambie de alguna manera.

O debería ser fácil recrear el enlace simbólico en el nuevo sistema Linux, ya sea en un script automatizado o simplemente copiando y pegando tu ln personalizado línea en una terminal, como

#!/bin/bash
ln -s TARGET LINKNAME

Todo esto supone que su nuevo sistema Linux tiene el mismo archivo de destino en el mismo lugar que el sistema Linux original.


Linux
  1. Cómo crear enlaces duros y simbólicos en Linux

  2. Cómo copiar o clonar permisos de un archivo a otro en Linux

  3. Qué son los Enlaces Simbólicos (Soft Links) y cómo crearlos bajo Linux

  4. ¿Cómo puedo vincular un archivo en Linux?

  5. ¿Cómo copio un archivo/carpeta del directorio de inicio de otro usuario en Linux?

Cómo vincular un archivo en Linux

Cómo copiar archivos y directorios en la terminal de Linux

¿Qué son los enlaces simbólicos en Linux? ¿Cómo crear enlaces simbólicos?

¿Cómo me conecto a Linux VPS a través de SSH desde Linux y Windows OS?

Cómo convertir un archivo .pem a un archivo .ppk en Windows y Linux

Cómo instalar Java 8 JRE y JDK desde un archivo RPM en Linux