Linux:查找给定“原始”文件的所有符号链接?(反向“ readlink”)

考虑以下命令行片段:

$ cd /tmp/

$ mkdir dirA

$ mkdir dirB

$ echo "the contents of the 'original' file" > orig.file

$ ls -la orig.file

-rw-r--r-- 1 $USER $USER 36 2010-12-26 00:57 orig.file

# create symlinks in dirA and dirB that point to /tmp/orig.file:

$ ln -s $(pwd)/orig.file $(pwd)/dirA/

$ ln -s $(pwd)/orig.file $(pwd)/dirB/lorig.file

$ ls -la dirA/ dirB/

dirA/:

total 44

drwxr-xr-x 2 $USER $USER 4096 2010-12-26 00:57 .

drwxrwxrwt 20 root root 36864 2010-12-26 00:57 ..

lrwxrwxrwx 1 $USER $USER 14 2010-12-26 00:57 orig.file -> /tmp/orig.file

dirB/:

total 44

drwxr-xr-x 2 $USER $USER 4096 2010-12-26 00:58 .

drwxrwxrwt 20 root root 36864 2010-12-26 00:57 ..

lrwxrwxrwx 1 $USER $USER 14 2010-12-26 00:58 lorig.file -> /tmp/orig.file

在这一点上,我可以readlink用来查看什么是“原始”(好吧,我想这里的常用术语是“目标”或“源”,但是我认为这些也可以是相反的概念,所以我将只需将其称为符号链接的“原始”文件即可

$ readlink -f dirA/orig.file 

/tmp/orig.file

$ readlink -f dirB/lorig.file

/tmp/orig.file

…但是,我想知道的是-是否可以在“原始”文件上运行一个命令,并找到指向该文件的所有符号链接?换句话说,类似(pseudo):

$ getsymlinks /tmp/orig.file

/tmp/dirA/orig.file

/tmp/dirB/lorig.file

预先感谢您的任何评论,

干杯!

回答:

我还没有看到用于此目的的命令,这并不是一件容易的事,因为目标文件包含指向该源文件的零信息。

这类似于“硬”链接,但至少那些链接始终位于同一文件系统上,因此您可以执行a find -inode列出它们。软链接的问题更多,因为它们可以跨文件系统。

我认为您要做的基本上是ls -al对整个层次结构中的每个文件都执行一个操作,然后使用它grep进行搜索->

/path/to/target/file

例如,这里是我的系统上的一个我跑(格式化的可读性-最后两行实际上是对 一个 在现实输出线):

pax$ find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /usr/share/applications'

lrwxrwxrwx 1 pax pax 23 2010-06-12 14:56 /home/pax/applications_usr_share

-> /usr/share/applications

以上是 Linux:查找给定“原始”文件的所有符号链接?(反向“ readlink”) 的全部内容, 来源链接: utcz.com/qa/410923.html

回到顶部