如何在当前目录中找到所有软链接(符号链接)?


10

问题与中的shell脚本有关bash

如何使用脚本检查当前目录中的哪些文件是软链接?

万一我使用了错误的术语,当我说软链接时,我指的是使用创建的文件ln -s

我设法想到的唯一一件事就是将评估ls -la作为一个表达式,然后解析其结果,但是显然这不是最佳解决方案。


1
它们被称为“符号链接”(与“硬链接”相对)。
暂停,直到另行通知。

Righto,我知道我可能错了这个词,感谢大家的注意
bguiz

软链接也很好,但是要有一个空格。:
Arjan

Answers:



14

您可能并不需要脚本。要仅在当前文件夹中显示任何符号链接,而无需递归到任何子文件夹中:

找 。-maxdepth 1 -l型-print

或者,要获取更多信息,请使用以下方法之一:

找 。-maxdepth 1 -type l -exec ls -ld {} +
找 。-maxdepth 1 -type l -print0 | xargs -0 ls -ld

要知道,如果一个文件是一个符号链接,可以使用readlink,这将输出什么,如果它不是一个符号链接。以下示例不是很有用,但是显示了如何readlink忽略普通文件和文件夹。使用以下之一:

找 。-maxdepth 1 -exec readlink {} +
找 。-maxdepth 1 -print0 | xargs -0读链接

请注意,上述-exec ... +xargs ...比快得多-exec ... \;。喜欢:

时间查找/ usr / bin -maxdepth 1 -type l -exec ls -ld {} \;
真正的0m0.372s
用户0m0.087s
sys 0m0.163s

时间查找/ usr / bin -maxdepth 1 -type l -exec ls -ld {} +
真实的0m0.013s
用户0m0.004s
sys 0分0.008秒

时间查找/ usr / bin -maxdepth 1 -type l -print0 | xargs -0 ls -ld
真正的0m0.012s
用户0m0.004s
sys 0分0.009秒

我更喜欢Polsy的答案,还是为您+1,因为有一天我可能需要在shell脚本之外进行。
bguiz

1
您不一定需要xargs。您可以只使用find。-maxdepth 1 -exec readlink {} \;
stib

诚然,@stib,不过xargs很多在我的Mac更快; 看到我的编辑。但是,我今天新学到了一些东西:有还+,而不是\;(虽然有些人声称,这有/有问题grep。)
阿尔扬
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.