macos - 符号链接(symbolic link)在共享到 Windows 或 Linux (smb) 时有效,但在共享到 Mac(afp 或 smb)时损坏

标签 macos symlink smb afp

在 Mac 上,我有一个共享文件夹 ~\Documents。有两个子文件夹:Data 和 Data_2011,前者包含过去几年的文件文件夹,后者包含指向 Data 文件夹中自 2011 年 1 月 1 日以来更新的文件夹的符号链接(symbolic link)。这些链接是使用标准创建的ln -s 命令。

当我在 Windows 计算机上安装共享文档文件夹时,链接有效。当我使用 smb 在 Linux 上挂载时,链接有效。当我直接在托管 Mac 上使用这些链接时,它们可以正常工作。但是,当我从远程 Mac 装载 Documents 文件夹时,软链接(soft link)被破坏。需要明确的是,我通过转到 Finder > 连接到服务器 > afp://xxx.xxx.xx.xx/或 smb://xxx.xxx.xx.xx/Documents

来挂载文档文件夹

关于如何让这些软链接(soft link)在共享到远程 Mac 时发挥作用,有什么想法吗?

-丝博

最佳答案

Mac OS 文件共享将符号链接(symbolic link)公开为实际符号链接(symbolic link)。

如果我使用 AFP 或 SMB 将一台 Mac 连接到另一台 Mac,我可以确认这一点。

请注意,符号链接(symbolic link)是由客户端解析的 - 即使在非文件共享的情况下,这也意味着符号链接(symbolic link)中的相对路径可能很棘手,在涉及网络文件共享的情况下,这意味着客户端计算机需要能够看到目标文件(目标文件也必须位于共享并挂载的文件夹中),并且路径需要相同。

例如,如果我在主目录中创建一个名为“foo”的文本文件,然后执行“ln -s foo symlink”来创建一个名为 symlink 的链接,然后从第二台计算机挂载该主目录并执行“ls -l”它显示为“symlink@ -> foo”,如果我cat该文件我可以读取它。但是,如果我将符号链接(symbolic link)创建为“ln -s/Users/matt/foo symlink”,则在第二台计算机上 ls -l 将其显示为“symlink@ ->/Users/matt/foo”,并且 cat 说“cat:符号链接(symbolic link):没有这样的文件或目录”。这是因为在第二台计算机上,/Users/matt 是一个本地主目录,不包含名为 foo 的文件(如果包含,解析符号链接(symbolic link)的任何内容都会看到本地 foo,而不是从第一台计算机共享的 foo) .

所以基本上:您可以使用“ls -l”来查看符号链接(symbolic link)指向的位置,并注意客户端计算机将解析符号链接(symbolic link)并尝试打开具有该名称的任何文件,这可能是也可能不是您所期望的.

(您的测试在 Linux 计算机上运行而不是在 Mac 上运行的原因可能是 Linux 计算机安装了更多网络共享或具有不同的名称,因此符号链接(symbolic link)目标名称是 Linux 计算机上的有效文件名,但不是Mac。)

关于macos - 符号链接(symbolic link)在共享到 Windows 或 Linux (smb) 时有效,但在共享到 Mac(afp 或 smb)时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4777791/

相关文章:

c - 读取内核空间中的符号链接(symbolic link)

c - 我如何使用 GSS API 更新 kerberos 服务票据

linux - 从 CUPS 打印 Windows (samba) 打印队列的作业状态

c++ - 以编程方式升级应用程序权限 OS X

c - 为什么 popen() 只工作一次?

macos - 常规 gcc 和 Mac OSX gcc 之间的区别?

macos - NSOpenPanel 选择文件并填充 NSTableView

linux - 是否有任何 POSIX 方法通过 fstat() 检查文件是否是符号链接(symbolic link)?

linux - 无法从/usr/local/bin/symlink 执行

python - 检查python3中是否存在samba目录