Unix查找列表匹配目录

时间:2017-12-27 19:42:48

标签: shell file command-line directory find

我有一个相当有趣的问题,我正在努力寻找最佳解决方案。我正在为Emacs创建一个文件自动完成后端。这意味着我使用linux find命令来获取文件和目录。

后端被赋予一个带有部分完成路径的文件(例如/usr/folder/foo),我想获取所有可以匹配两个目录的部分路径的文件和目录(例如,它可以提供{{ 1}},foo_bar/foo_bar/barfoo_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 的调用(特别是因为必须为每个匹配的目录调用最后一步)。这使得候选人变得缓慢,尤其是在大型文件系统中。理想情况下,我只想进行一次调用以获得所有候选人。但我没有找到一个很好的方法来做到这一点。有谁知道最佳解决方案?

1 个答案:

答案 0 :(得分:0)

查看find联机帮助页,我最终使用了-printf

find -L foo* -maxdepth 1 -printf '%p\t%y\n'

给了我所需要的一切。只有一个命令,区分文件和目录,搜索深度等。