我需要完全解析并相对于给定目录的路径。这必须有效地完成,因为路径的数量通常大于 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 …