在 *nix 中,符号链接通常只是带有“符号链接”属性的纯文本文件。该文件包含链接目标的路径。Windows 上不存在“符号链接”属性。因此,当您在 Windows 上提取符号链接时,它会变成一个常规文本文件 [尽管它也可能出错,它可能取决于您用来提取存档的工具]。当复制回 *nix 时,它仍然是一个普通的文本文件。
唯一的解决方案是将“符号链接”属性保留在某些外部元数据存储中,并在上传文件或创建存档时恢复该属性。
尽管我不知道有任何支持此功能的工具。
你绝对可以编码这个。
使用 WinSCP:您编写生成WinSCP 脚本的代码。该代码将递归迭代本地目录结构。对于文件,它将生成put上传命令。对于符号链接,它将生成ln创建符号链接的命令。要区分符号链接,您可以仅使用简单的启发式方法(符号链接 = 带斜杠的短单行文本文件)。一种正确的方法是在提取存档时记住文件符号链接属性(但您也必须自己编写提取代码,另请参阅下面的提示)。
使用存档:我最近为 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);
Run Code Online (Sandbox Code Playgroud)
如果您更熟悉 Python,请参阅如何使用 Python 的 zipfile 模块在 ZIP 文件中的文件上设置权限(属性)?它仅处理权限,但您可以根据我的 PHP 示例使用符号链接位轻松扩展它。
| 归档时间: |
|
| 查看次数: |
10750 次 |
| 最近记录: |