linux - 仅获取文件的符号链接(symbolic link)

标签 linux find symlink

我调查了symbolic link: find all files that link to this filehttps://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file但他们似乎并没有解决问题。

如果我find -L -samefile path/to/file 结果包含硬链接(hard link)和符号链接(symbolic link)。

我一直在尝试想出一个仅获取符号链接(symbolic link)的解决方案,但似乎无法弄清楚。 我一直在尝试将 -samefile-type l 结合起来,但没有成功。

man find

说你可以将一些选项组合成一个表达式,但我没能正确地做到这一点。 非常感谢任何帮助!

最佳答案

好吧,我一开始完全误解了这个问题。

为了仅查找某个文件的符号链接(symbolic link),我认为组合多个命令仍然是一个好方法。 所以您知道要链接到的文件,我们将其命名为 targetfile.txt 。我们的目录结构如下:

$ ls -laR
.:
total 24
drwxrwxr-x  4 telorb telorb 4096 Mar 28 09:51 .
drwxrwxr-x 57 telorb telorb 4096 Mar 28 09:49 ..
-rw-rw-r--  1 telorb telorb   21 Mar 28 09:51 another_file.txt
drwxrwxr-x  2 telorb telorb 4096 Mar 28 09:52 folder1
drwxrwxr-x  2 telorb telorb 4096 Mar 28 09:53 folder2
-rw-rw-r--  3 telorb telorb   28 Mar 28 09:52 targetfile.txt

./folder1:
total 12
drwxrwxr-x 2 telorb telorb 4096 Mar 28 09:52 .
drwxrwxr-x 4 telorb telorb 4096 Mar 28 09:51 ..
-rw-rw-r-- 3 telorb telorb   28 Mar 28 09:52 hardlink
lrwxrwxrwx 1 telorb telorb   17 Mar 28 09:49 symlink1 -> ../targetfile.txt

./folder2:
total 12
drwxrwxr-x 2 telorb telorb 4096 Mar 28 09:57 .
drwxrwxr-x 4 telorb telorb 4096 Mar 28 09:51 ..
-rw-rw-r-- 3 telorb telorb   28 Mar 28 09:52 hardlink2
lrwxrwxrwx 1 telorb telorb   17 Mar 28 09:57 symlink2_to_targetfile -> ../targetfile.txt
lrwxrwxrwx 1 telorb telorb   19 Mar 28 09:53 symlink_to_anotherfile -> ../another_file.txt

folder1/hardlink中的文件是 targetfile.txt 的硬链接(hard link),folder1/symlink1是我们感兴趣的符号链接(symbolic link),与 folder2/symlink2_to_targetfile 相同。还有另一个指向另一个文件的符号链接(symbolic link),我们对此不感兴趣。

我采取的方法是首先使用 find . -type l从指定文件夹递归获取符号链接(symbolic link)(并且我们仍然有完整路径信息)。

然后通过管道将其发送到 xargsls -l获取链接指向哪个文件的信息,最后 grep 我们的 targetfile.txt ,以便我们删除未指向所需文件的链接。命令完整:

find . -type l | xargs -I % ls -l % | grep targetfile.txt
lrwxrwxrwx 1 telorb telorb 17 Mar 28 09:57 ./folder2/symlink2_to_targetfile -> ../targetfile.txt
lrwxrwxrwx 1 telorb telorb 17 Mar 28 09:49 ./folder1/symlink1 -> ../targetfile.txt

xargs -I % ls -l %有时会让人们感到困惑。基本上与 -I %你告诉 xargs %符号将表示您希望 xargs 放置它收到的输入的所有位置。因此它将有效地将其替换为 ls -l output_of_find_command

关于linux - 仅获取文件的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22701097/

相关文章:

c++ - Android:静态链接到 libstdc++

使用 C 更改文本颜色

UNIX 命令行 - 如何使用嵌入式通配符访问 "find"目录

linux - 通过扩展名删除文件的最佳方法是什么?

perl - perl中的符号链接(symbolic link)功能是否覆盖现有链接

powershell - 用嵌套文件夹中的相对符号链接(symbolic link)替换快捷方式

php - 如何在 MySQL 中获取数据库列表和有权访问它的用户

c - 为什么信号处理出现故障?

linux - 如何删除 linux 代码文件中未使用的文件?

php - 在安全模式下创建没有 shell 访问权限的符号链接(symbolic link)?