GNU/Linux >> Belajar Linux >  >> Linux

Cara menyalin file tautan simbolik dari Linux ke Windows dan kemudian kembali ke Linux tetapi tetap menyimpannya sebagai tautan simbolik

Di *nix, symlink biasanya hanya berupa file teks biasa dengan atribut "symlink". File tersebut berisi jalur ke target tautan. Atribut "symlink" tidak ada di Windows. Jadi ketika Anda mengekstrak symlink di Windows, itu menjadi file teks biasa [meskipun mungkin juga error, mungkin tergantung pada alat yang Anda gunakan untuk mengekstrak arsip]. Saat disalin kembali ke *nix, itu tetap menjadi file teks biasa.

Satu-satunya solusi adalah mempertahankan atribut "symlink" di beberapa penyimpanan metadata eksternal dan memulihkan atribut tersebut saat mengunggah file atau membuat arsip.

Meskipun saya tidak mengetahui alat apa pun yang mendukung ini.

Anda pasti bisa membuat kode ini.

  1. Menggunakan WinSCP :Anda membuat kode yang menghasilkan skrip WinSCP. Kode akan mengulang struktur direktori lokal secara rekursif. Untuk file itu akan menghasilkan put perintah untuk mengunggahnya. Untuk symlink, ini akan menghasilkan ln perintah untuk membuat symlink. Untuk membedakan symlink, Anda mungkin dapat menggunakan heuristik sederhana saja (symlink =file teks satu baris pendek dengan garis miring). Cara yang tepat adalah dengan mengingat atribut file symlink saat mengekstraksi arsip (tetapi Anda juga harus membuat kode ekstraksi sendiri, lihat juga petunjuk di bawah).

  2. Menggunakan arsip :Saya baru-baru ini mengimplementasikan ini untuk arsip ZIP. (Bahkan di Windows) Anda dapat menggunakan metode PHP ZipArchive::setExternalAttributes untuk menandai file yang diarsipkan sebagai symlink. Perhatikan bahwa fungsi ini hanya tersedia sejak PHP 5.6.

    Contoh kode:

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

    Jika Anda lebih terbiasa dengan Python, lihat Bagaimana cara mengatur izin (atribut) pada file dalam file ZIP menggunakan modul zipfile Python? Ini hanya berurusan dengan izin, tetapi Anda dapat dengan mudah memperluasnya dengan bit symlink, sesuai contoh PHP saya.


Saya akan mencoba menyimpan file tautan di dalam arsip gzip (atau tar.gz), dan hanya mengekstraknya di sistem linux lain. Saya tahu windows umumnya tidak menangani atribut &izin file linux dengan baik, dan mengekstrak tautan di windows mungkin mengubahnya entah bagaimana.

Atau seharusnya mudah untuk membuat ulang symlink pada sistem linux baru, baik dalam skrip otomatis atau cukup salin &tempel ln khusus Anda baris ke terminal, seperti

#!/bin/bash
ln -s TARGET LINKNAME

Ini semua dengan asumsi sistem linux baru Anda memiliki file target yang sama di tempat yang sama dengan sistem linux asli.


Linux
  1. Cara Menghapus File dan Direktori di Linux dari Command Line

  2. Cara menyalin atau mengkloning izin dari satu file ke file lain di Linux

  3. Apa itu Tautan Simbolik (Tautan Lunak) dan cara membuatnya di Linux

  1. Cara Membuat Tautan Keras dan Simbolik di Linux

  2. Cara Menyalin Izin dan Kepemilikan File ke File Lain di Linux

  3. salin file pscp dari jarak jauh dari Windows ke Linux

  1. Cara Memisahkan Dan Menggabungkan File Dari Baris Perintah Di Linux

  2. Bagaimana saya bisa menghubungkan file di Linux?

  3. Bagaimana cara menyalin file/folder dari direktori home pengguna lain di Linux?