小编kam*_*mpu的帖子

如何有效地取消引用 `find` *output* 文件名中的所有符号链接?

我需要完全解析并相对于给定目录的路径。这必须有效地完成,因为路径的数量通常大于 100,000。

现状:我有一个包含目录主要符号链接到其他目录,如

foo
 123 -> ../baz/123
 896 -> ../bar/896
Run Code Online (Sandbox Code Playgroud)

(请注意, foo 不仅包含指向目录的符号链接,它还包含我也必须捕获的普通文件。)

这些符号链接目录包含文件。. 我想以表格形式获取这些文件的列表

baz/123/some.file
bar/123/other.file
Run Code Online (Sandbox Code Playgroud)

也就是说,当“查找”找到符号链接时,我希望它在报告内容时取消引用该路径。

所以我从 foo 的父目录运行这个命令:

find -L foo -type f
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

老实说,您希望-L声称“遵循符号链接”的选项能够实现这种行为。但是,其实际的行为是寻找这些目录中的内容,但报告的文件里面他们与他们的非间接引用的名称,即。结果看起来像

foo/baz/123/some.file
foo/bar/896/another.file
Run Code Online (Sandbox Code Playgroud)

结果将用于针对所有 1.完全解析和 2.相对于 foo 的父目录的文件路径列表进行设置操作,因此每个结果也必须满足该标准。为了这些目的,我可以保证所有链接都是可解析的,即。没有一个是圆形的或过深的。大多数(但不是所有)链接都指向目录而不是文件。

目前,我能做的最好的事情就是编写一个 Python 脚本,它将任何未取消引用的路径重写为已解析的路径。但是由于涉及的文件数量在100000+范围内,这不是很实用(而且相当荒谬,因为find已经费心去取消引用它们,它只是没有返回取消引用的路径)。(编辑:请参阅我对这篇文章的评论——我找到了一个非解决方案(因为它有效地完成了工作,但以错误的方式——执行外部命令)。)

我相信我应该可以做这个任务只是find和没有外部命令,但我没有找到该男子页启迪这里-没有的-L-H-P-follow有正确的行为,也没有-printf %l-exec出于显而易见的原因而退出 - 它不是find. 有任何想法吗?

编辑 2:在这一点上,Stephane …

linux find symlink

5
推荐指数
1
解决办法
5396
查看次数

标签 统计

find ×1

linux ×1

symlink ×1