2017-12-27 1255 views
0

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

后端给出了部分完成的路径的文件(如/usr/folder/foo),我要抢,可以匹配两个目录下(如例如部分路径的所有文件和目录,它可以提供foo_bar/foo_bar/barfoo_bar/bazfoo_bar/bat/foo_baz)。到目前为止,我只去过将其分为3个步骤

查找当前目录下的所有文件可以通过前缀

find foo* -type f -maxdepth 1 

收集我们可能想通过

find foo* -type d -maxdepth 1 
寻找所有可能的目录

使用每个这些目录中,使2个电话找(我需要能够文件和目录区分)

find foo_bar/ -type d -maxdepth 1 
find foo_bar/ -type f -maxdepth 1 

此解决方案涉及很多拨打find(特别是因为必须为每个匹配的目录调用最后一步)的。这使候选人变得缓慢,特别是在大型文件系统中。理想情况下,我只想让一个电话获得所有的候选人。但我还没有找到一个好方法来做到这一点。有谁知道最佳解决方案?

回答

0

看虽然find联机帮助页,我结束了使用-printf

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

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