我有一个相当有趣的问题,我正在努力寻找最佳解决方案。我正在为Emacs创建一个文件自动完成后端。这意味着我使用linux find
命令来获取文件和目录。
后端被赋予一个带有部分完成路径的文件(例如/usr/folder/foo
),我想获取所有可以匹配两个目录的部分路径的文件和目录(例如,它可以提供{{ 1}},foo_bar/
,foo_bar/bar
,foo_bar/baz
foo_bar/bat/
)。到目前为止,我只是将其分解为3个步骤
查找当前目录中可能与前缀
匹配的所有文件foo_baz
收集我们可能希望查看的所有可能目录
find foo* -type f -maxdepth 1
使用每个目录进行2次以上的调用(我需要能够区分文件和目录)
find foo* -type d -maxdepth 1
此解决方案涉及很多对find foo_bar/ -type d -maxdepth 1
find foo_bar/ -type f -maxdepth 1
的调用(特别是因为必须为每个匹配的目录调用最后一步)。这使得候选人变得缓慢,尤其是在大型文件系统中。理想情况下,我只想进行一次调用以获得所有候选人。但我没有找到一个很好的方法来做到这一点。有谁知道最佳解决方案?
答案 0 :(得分:0)
查看find
联机帮助页,我最终使用了-printf
。
find -L foo* -maxdepth 1 -printf '%p\t%y\n'
给了我所需要的一切。只有一个命令,区分文件和目录,搜索深度等。