我可以做这个:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
但我希望能够做到这一点:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
这可能吗?我可以以某种方式解析相对路径名并将其传递给ln
?
pen*_*359 89
如果您创建指向相对路径的符号链接,它会将其存储为相对符号链接,而不是像示例所示的绝对链接。这通常是一件好事。当文件系统安装在别处时,绝对符号链接不起作用。
您的示例不起作用的原因是它相对于符号链接的父目录而不是ln
运行位置。
你可以做:
$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
或者为此很重要:
$ cd foo
$ ln -s foo/bar.txt ../bar.txt
Run Code Online (Sandbox Code Playgroud)
重要的是要意识到之后的第一个参数ln -s
被存储为符号链接的目标。它可以是任意字符串(唯一的限制是它不能为空并且不能包含 NUL 字符),但是在使用和解析符号链接时,该字符串被理解为到符号链接的父目录(当它不以 开头时/
)。
小智 38
如果您使用较新的 coreutils(我使用的是 coreutils-8.22-11),它可以选择这样做:
ln --help | grep relative
can hold arbitrary text; if later resolved, a relative link is
-r, --relative create symbolic links relative to link location
Run Code Online (Sandbox Code Playgroud)
例如:
$ mkdir /tmp/test
$ touch /tmp/test/to
$ ln -rs /tmp/test/to /tmp/test/from
$ ls -l /tmp/test/from
lrwxrwxrwx 1 ptr ptr 4 aug 25 17.02 /tmp/test/to -> from
Run Code Online (Sandbox Code Playgroud)
有一个名为symlinks
(最初由 Mark Lords,现在由 J. Brandt Buckley 维护)的方便的小实用程序,存在于许多 Linux 发行版中。
要将目录中的所有绝对符号链接转换为相对链接:
symlinks -c /path/to/directory
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有转换单个链接的选项,您必须先将其移动到其自己的目录中。
mkdir ../tmp
mv link-to-relativize ../tmp
symlinks ../tmp
mv ../tmp/* .
rmdir ../tmp
Run Code Online (Sandbox Code Playgroud)
小智 5
由于最常见的 shell 扩展路径,要创建相对符号链接,您应该引用“源路径”。
另外,-s
参数的意思是--symbolic
. ln
默认创建硬链接。
$ ln -s '../../relative_path' path
$ ls -al path
lrwxrwxrwx 1 empjustine empjustine 19 Aug 6 01:38 path -> ../../relative/path
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
103820 次 |
最近记录: |