将多个文件符号链接到现有文件夹

Symlink multiple files to an existing folder

我有这个命令:

ln -sf src/* lang/golang/src/genericc/

我想将 src 中的所有文件符号链接到现有的 genericc 目录,但是当我 运行 上面的命令时,我在目标中得到了损坏的符号链接。有人知道怎么做吗?

Symlinks 使用相对路径创建(即源路径不以“/”开头)相对于 link 所在的目录进行解析。这意味着 link 到 lang/golang/src/genericc/ 目录中的 "src/foo.c" 会尝试解析到 lang/golang/src/genericc/src/foo.c,这可能不存在。

解决方案:要么使用源文件的绝对路径,如下所示:

ln -sf /path/to/src/* lang/golang/src/genericc/

或者,为了让 * 通配符与正确的命令一起工作,cd 到目标目录,这样相对路径在创建期间的工作方式与在解析期间的工作方式相同:

cd lang/golang/src/genericc
ln -sf ../../../../src/* ./

首先,你可以试试ln -s $PATH_TO_SRC/* $PATH_TO_TARGET/。 但是,它可能有 "Argument list too long error"。

那么你可以使用:

find $PATH_TO_SRC/ -type f -name "*.jpg" -exec cp -s {} . \;

因为如果您将 ln -s 与查找或 bash 循环一起使用,它只会创建一个空的 link。相反,我们也可以使用 cp -s 来创建一个 smylink。