如何在不包含实际文件夹的情况下对文件夹内容进行符号链接?

时间:2012-09-30 23:35:29

标签: macos bash dropbox

我正在尝试将我的Library / Fonts目录与我的Dropbox中的文件夹进行符号链接,这样我就不必继续安装并确定哪台机器具有我需要的字体。当我尝试这个时:

ln -s Fonts/ ~/Library/Fonts

我得到了这个错误:

ln: /Users/Username/Library/Fonts/: File exists

我无法删除该文件夹,因为它是系统所要求的,因此不会让您删除。

3 个答案:

答案 0 :(得分:1)

从Dropbox目录中删除Fonts文件夹(显然你想要移动任何你想要保存的文件),然后输入:

ln -s ~/Library/Fonts Fonts

请注意,要为最后一个字体目录追踪/

编辑以发表评论: 你是对的,这只链接到一个/ Library / Fonts文件夹。您可以尝试在一台计算机上执行此操作,然后在其他计算机上尝试:

  1. 关闭Dropbox
  2. 保存〜/ Dropbox / Fonts文件夹
  3. 执行与第一台计算机(ln -s ~/Library/Fonts Fonts
  4. 相同的符号链接功能
  5. 复制可能不在此计算机上的任何字体
  6. 重新启用Dropbox
  7. 我没有试过这个,所以我不知道它是否会起作用,但它不会造成伤害。

    明确 工作的另一种选择是设置一个cron作业,将〜/ Library / Fonts文件夹中任何不存在的字体复制到〜/ Dropbox / Fonts文件夹中反之亦然。如果符号链接技巧有效,我认为这将是首选。

答案 1 :(得分:1)

在创建链接之前,

ln -s -F将强制创建删除原始目标的链接。

答案 2 :(得分:1)

此方法 仅在 目标文件夹符号链接时才有效。

使用OSX或BSD派生的unix附带的ln

ln -s -h -F /source/folder/to/use /destination/folder/to/overwrite

-h是关键所在。否则你最终会得到类似〜/ Library / Fonts / Fonts 的内容,因为它遍历该文件夹。仅-F不会尝试覆盖,因为一旦它进入该文件夹就不会发生冲突。

ln manpage的相关部分:

      ln [-Ffhinsv] source_file ... target_dir

-s    Create a symbolic link.
-h    If the target_file or target_dir is a symbolic link, do not follow it.
      This is most useful with the -f option, to replace a symlink which may
      point to a directory.
-F    If the target file already exists and is a directory, then remove it
      so that the link may occur.

GNU coreutils ln用户:

如果您使用ln(linux,brew,macports等)中的 GNU coreutils ,请使用{{ 1}}:

-T

另外,使用 GNU ln -sTf /source/folder/to/use /destination/folder/to/overwrite可以替换普通文件夹。查看ln选项的联机帮助页,使用它指定目标文件夹的父级:

-t

目录中定位创建需要尾随ln -sf -t /destination/folder/to/overwrite/.. /source/folder/to/use,并将其留在原位。