GNU/Linux >> Tutoriels Linux >  >> Linux

Comment copier le fichier de lien symbolique de Linux vers Windows, puis de nouveau vers Linux tout en le conservant comme lien symbolique

Dans *nix, un lien symbolique est généralement un simple fichier texte avec un attribut "symlink". Le fichier contient le chemin vers la cible du lien. L'attribut "symlink" n'existe pas sous Windows. Ainsi, lorsque vous extrayez le lien symbolique sous Windows, il devient un fichier texte normal [bien qu'il puisse également y avoir une erreur, cela peut dépendre d'un outil que vous utilisez pour extraire l'archive]. Lorsqu'il est recopié dans *nix, il reste un fichier texte normal.

La seule solution serait de conserver l'attribut "symlink" dans un magasin de métadonnées externe et de restaurer l'attribut lors du téléchargement du fichier ou de la création de l'archive.

Bien que je ne connaisse aucun outil prenant en charge cela.

Vous pouvez certainement coder ceci.

  1. Utiliser WinSCP :Vous créez un code qui génère un script WinSCP. Le code itérerait de manière récursive une structure de répertoires locaux. Pour un fichier, il générera le put commande pour le télécharger. Pour un lien symbolique, il générera le ln commande pour créer un lien symbolique. Pour distinguer le lien symbolique, vous pouvez peut-être utiliser une simple heuristique (lien symbolique =un court fichier texte d'une ligne avec des barres obliques). Une méthode appropriée serait de se souvenir de l'attribut de lien symbolique du fichier lors de l'extraction de l'archive (mais vous devrez également coder l'extraction vous-même, voir également un indice ci-dessous).

  2. Utiliser les archives :Je l'ai récemment implémenté pour une archive ZIP. (Même sous Windows) Vous pouvez utiliser la méthode PHP ZipArchive::setExternalAttributes pour marquer un fichier archivé comme un lien symbolique. Notez que la fonction est disponible depuis PHP 5.6 uniquement.

    Exemple de code :

    $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 vous êtes plus familier avec Python, consultez Comment définir des autorisations (attributs) sur un fichier dans un fichier ZIP à l'aide du module zipfile de Python ? Il ne traite que des autorisations, mais vous pouvez facilement l'étendre avec le bit de lien symbolique, comme dans mon exemple PHP.


J'essaierais de conserver le fichier de lien dans l'archive gzip (ou tar.gz) et de ne l'extraire que sur un autre système Linux. Je sais que Windows ne gère généralement pas bien les attributs et les autorisations des fichiers Linux, et l'extraction du lien sur Windows le modifie probablement d'une manière ou d'une autre.

Ou il devrait être facile de recréer le lien symbolique sur le nouveau système Linux, soit dans un script automatisé, soit simplement en copiant et collant votre ln personnalisé ligne dans un terminal, comme

#!/bin/bash
ln -s TARGET LINKNAME

Tout cela suppose que votre nouveau système Linux a le même fichier cible au même endroit que le système Linux d'origine.


Linux
  1. Comment créer des liens matériels et symboliques sous Linux

  2. Comment copier les autorisations et la propriété des fichiers dans un autre fichier sous Linux

  3. Comment diviser et combiner des fichiers à partir de la ligne de commande sous Linux

  4. Comment puis-je lier symboliquement un fichier sous Linux?

  5. pscp copier le fichier à distance de Windows vers Linux

Comment créer un lien symbolique vers un fichier sous Linux

Comment copier des fichiers et des répertoires dans un terminal Linux

Qu'est-ce que les liens symboliques sous Linux ? Comment créer des liens symboliques ?

Comment me connecter à Linux VPS via SSH depuis Linux et Windows OS ?

Comment convertir un fichier .pem en un fichier .ppk sous Windows et Linux

Comment installer Java 8 JRE et JDK à partir du fichier RPM sous Linux