如何将符号链接文件从Linux复制到Windows,然后回到Linux,但仍然将其作为符号链接

我的Linux机器上有一个符号链接

我只想复制符号链接(不是目标)到Windows机器,然后将这个符号链接从Windows机器复制回其他Linux机器,符号链接应该继续工作。

我试过的:

  1. gziped符号链接
  2. 使用WinSCP将gzip文件移动到Windows机器
  3. 提取的符号链接
  4. 使用WinSCP将符号文件移动到Linux机器上

现在这个文件不再是一个符号链接了。

有谁知道这样做的伎俩?

Solutions Collecting From Web of "如何将符号链接文件从Linux复制到Windows,然后回到Linux,但仍然将其作为符号链接"

在* nix中,符号链接通常只是一个具有“符号链接”属性的纯文本文件。 该文件包含链接目标的路径。 Windows上不存在“符号链接”属性。 所以当你在Windows上提取符号链接的时候,它就变成了一个常规的文本文件[虽然它也可能是错误的,它可能取决于你用来提取存档的工具]。 当被复制回* nix时,它保持一个普通的文本文件。

唯一的解决方案是在某些外部元数据存储中保留“symlink”属性,并在上传文件或创建归档时恢复属性。

虽然我不知道有任何工具支持这一点。

你绝对可以编码。

  1. 使用WinSCP :您创建一个生成WinSCP脚本的代码。 代码将递归迭代本地目录结构。 对于一个文件,它将生成put命令来上传它。 对于符号链接,它将生成ln命令来创建符号链接。 为了区分这个符号链接,你可以使用一个简单的启发式(symlink =一个带有斜线的简短的单行文本文件)。 一个正确的方法是在提取归档文件时记住文件的符号链接属性(但是你也必须自己编写提取代码,下面还会看到提示)。

  2. 使用存档 :我最近实现了这个ZIP压缩文件。 (即使在Windows上)您可以使用PHP方法ZipArchive::setExternalAttributes将归档文件标记为符号链接。 请注意,该功能仅适用于PHP 5.6以上版本。

    示例代码:

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

    如果您更熟悉Python,请参阅如何使用Python的zipfile模块在ZIP文件中的文件上设置权限(属性)? 它只处理权限,但是可以使用符号链接位轻松扩展它,就像我的PHP示例一样。

我试着把链接文件保存在gzip(或tar.gz)档案中,并且只把它提取到另一个linux系统上。 我知道Windows通常不会很好地处理Linux文件属性和权限,并提取窗口上的链接可能会改变它。

或者,应该很容易在新的Linux系统上重新创建符号链接,无论是在自动脚本中,还是将自定义ln行复制并粘贴到终端中

 #!/bin/bash ln -s TARGET LINKNAME 

这些都假设你的新的Linux系统有相同的目标文件在原始的Linux系统相同的地方。