我在 macOS Sonoma 14.6.1 上,在源文件夹中有三个 JavaScript 源文件,并且正在ln -s
两个目标文件夹中创建指向它们的符号链接。
对于其中一个文件,它的两个链接都指向自身,而不是源文件。我尝试了各种方法来复制源文件,包括从编辑器重写它,但都无济于事。其他两个源文件的链接没有问题。
我能看到的问题文件和另外两个文件之间的唯一区别是,另外两个文件各有一个或两个扩展属性,而问题文件没有。另外两个文件中的一个有,com.apple.metadata:kMDItemWhereFroms
并且两者都有com.apple.lastuseddate#PS
。我不知道与问题文件的这种差异是否显著。
我可以通过将源文件复制到目标目录来解决此问题,但当然链接是更可取的。
命令:
$ ~/dev/keyboards/Custom/Ergogen
cd brec36/brec36-footprints #source directory
$ ~/dev/keyboards/Custom/Ergogen/brec36/brec36-footprints
ln -s elite-c.js ../brec36L/footprints/elite_c.js
# ls alias to show result:
$ ~/dev/keyboards/Custom/Ergogen/brec36/brec36-footprints
ll ../brec36L/footprints/elite_c.js
lrwxr-xr-x 1 brec wheel 10 Aug 21 09:52 ../brec36L/footprints/elite_c.js@ -> elite-c.js
您使用了:
ln -s
实际上,它不会将“目标”参数解释为相对于当前目录。相反,它只是将指定的路径存储为符号链接目标,而不进行任何修改(甚至不检查目标是否存在)——如果您指定了elite-c.js
,则文本elite-c.js
将存储为链接目标,而不会记录您的当前目录。一旦存储为链接目标,文本现在将被解释为相对于链接的位置,即在这个例子中,它变为相对于
../brec36L/footprints/
。为了避免这种情况,您需要先将路径转换为相对于链接位置的路径(Linux 有
realpath
此功能,我不知道 macOS 是否有类似功能),或者cd
转换为链接位置,以便 shell 的制表符补全可以帮助您完成此操作。例如:或者
如今,Linux(GNU Coreutils)具有
-r
使命令行为更合理的选项 -ln -s -r
将目标转换为适当的相对路径 - 但我不认为 macOS 会这样做。