GNU/Linux >> Linux Esercitazione >  >> Linux

Come copiare il file di collegamento simbolico da Linux a Windows e quindi di nuovo a Linux, mantenendolo comunque come collegamento simbolico

In *nix un collegamento simbolico è in genere solo un semplice file di testo con un attributo "link simbolico". Il file contiene il percorso della destinazione del collegamento. L'attributo "link simbolico" non esiste su Windows. Quindi, quando estrai il collegamento simbolico su Windows, diventa un normale file di testo [sebbene possa anche causare errori, potrebbe dipendere da uno strumento che usi per estrarre l'archivio]. Quando viene ricopiato in *nix, rimane un normale file di testo.

L'unica soluzione sarebbe mantenere l'attributo "link simbolico" in un archivio di metadati esterno e ripristinare l'attributo durante il caricamento del file o la creazione dell'archivio.

Anche se non sono a conoscenza di alcuno strumento che lo supporti.

Puoi sicuramente codificare questo.

  1. Utilizzando WinSCP :Si crea un codice che genera lo script WinSCP. Il codice itererebbe in modo ricorsivo una struttura di directory locale. Per un file genererà il put comando per caricarlo. Per un collegamento simbolico genererà il ln comando per creare un collegamento simbolico. Per distinguere il collegamento simbolico, puoi forse usare solo una semplice euristica (link simbolico =un breve file di testo di una riga con barre). Un modo corretto sarebbe quello di ricordare l'attributo link simbolico del file durante l'estrazione dell'archivio (ma dovresti anche codificare tu stesso l'estrazione, vedi anche un suggerimento sotto).

  2. Utilizzo dell'archivio :Recentemente l'ho implementato per un archivio ZIP. (Anche su Windows) Puoi usare il metodo PHP ZipArchive::setExternalAttributes per contrassegnare un file archiviato come collegamento simbolico. Si noti che la funzione è disponibile solo da PHP 5.6.

    Codice di esempio:

    $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);
    

    Se hai più familiarità con Python, vedi Come posso impostare i permessi (attributi) su un file in un file ZIP usando il modulo zipfile di Python? Si occupa solo delle autorizzazioni, ma puoi facilmente estenderlo con il bit di collegamento simbolico, come nel mio esempio PHP.


Proverei a mantenere il file di collegamento all'interno dell'archivio gzip (o tar.gz) ed estrarlo solo su un altro sistema Linux. So che Windows generalmente non gestisce bene gli attributi e i permessi dei file Linux, e l'estrazione del collegamento su Windows probabilmente lo cambia in qualche modo.

Oppure dovrebbe essere facile ricreare il collegamento simbolico sul nuovo sistema Linux, in uno script automatico o semplicemente copiando e incollando il tuo ln personalizzato line in un terminale, come

#!/bin/bash
ln -s TARGET LINKNAME

Tutto ciò presuppone che il tuo nuovo sistema Linux abbia lo stesso file di destinazione nella stessa posizione del sistema Linux originale.


Linux
  1. Come creare collegamenti rigidi e simbolici in Linux

  2. Come copiare le autorizzazioni e la proprietà dei file su un altro file in Linux

  3. Cosa sono i collegamenti simbolici (Soft Link) e come crearli sotto Linux

  4. Come posso collegare simbolicamente un file in Linux?

  5. Come posso copiare un file/cartella dalla home directory di un altro utente in Linux?

Come collegare simbolicamente un file in Linux

Come copiare file e directory nel terminale Linux

Che cosa sono i collegamenti simbolici in Linux? Come creare collegamenti simbolici?

Come mi collego a Linux VPS tramite SSH da Linux e Windows OS?

Come convertire un file .pem in un file .ppk su Windows e Linux

Come installare Java 8 JRE e JDK dal file RPM su Linux