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.
-
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 menghasilkanln
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). -
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.