继续跟踪符号链接?

继续跟踪符号链接?

我经常使用符号链接,但在移动原始文件后,我失去了符号链接的踪迹。我还使用符号链接来跟踪同一目录中的某些文件,但我再次失去了跟踪。

  • 无论我做出什么更改,有什么方法(工具/方法)可以跟踪符号链接吗?硬链接是唯一的方法吗?
  • 有什么方法可以以相对方式创建符号链接,以便当我移动包含原始文件和链接的目录时,该链接应该可以工作。

答案1

关于第二个问题,如果您使用相对路径创建符号链接,然后移动整个目录结构,它仍然应该有效。考虑以下终端会话:

~$ mkdir test
~$ cd test/
~/test$ mkdir test2
~/test$ cd test2/
~/test/test2$ touch testfile; echo "hello, world" > testfile
~/test/test2$ cat testfile 
hello, world
~/test/test2$ cd ..
~/test$ ln -s ./test2/testfile testfileln
~/test$ ls -l
total 8
drwxr-xr-x 2 xxxx xxxx 4096 2010-09-09 09:18 test2
lrwxrwxrwx 1 xxxx xxxx   16 2010-09-09 09:18 testfileln -> ./test2/testfile
~/test$ cd ..
~$ mv test/ testfoo
~$ cd testfoo/
~/testfoo$ ls -l
total 8
drwxr-xr-x 2 xxxx xxxx 4096 2010-09-09 09:18 test2
lrwxrwxrwx 1 xxxx xxxx   16 2010-09-09 09:18 testfileln -> ./test2/testfile
/testfoo$ cat testfileln 
hello, world

至于你的第一个问题,如果你确实想要一个链接,无论你如何处理文件的原始位置,都将引用同一个文件,那么硬链接可能就是你想要的。硬链接基本上只是引用同一索引节点的另一个名称。因此,硬链接和“原始文件”之间没有区别。但是,如果需要跨文件系统链接,硬链接通常不起作用,并且通常无法对目录建立硬链接。此外,在执行某些文件操作时您会注意到一些差异。最值得注意的是,删除原始文件不会删除该文件。硬链接仍将指向该文件并且可以访问。

答案2

您可以使用 readlink 命令来发现/检查(现已损坏的)链接最初指向的内容,然后将其修复为指向文件的新名称/位置。或者,您可以仅通过 shell 脚本重命名文件,该脚本重命名文件并搜索并修复指向该文件的任何链接。无论哪种方式,你都会这样:

find . -type l | while read L
do
    if readlink $L | grep -q "^$OLDNAME\$"
    then
        ln -sf $NEWNAME $L
    fi
done

但是,如果您一直这样做,那么符号链接可能不是您应该使用的。

相关内容