在edclipse / ides中,例如eclipse和textmate,可以快速查找项目目录中的特定文件。
是否有类似的工具可以在目录(递归),bash或其他shell中对文件名进行完整路径完成?
我有很多目录的项目,而且有很深的目录(叹气,java)。 命中shell中的选项卡只循环直接目录中的文件,这还不够= /
答案 0 :(得分:61)
find /root/directory/to/search -name 'filename.*'
# Directory is optional (defaults to cwd)
支持标准UNIX通配。有关详细信息,请参阅man find
。
如果你正在使用Vim,你可以使用:
:e **/filename.cpp
或:tabn
或任何接受文件名的Vim命令。
答案 1 :(得分:8)
如果您希望对文件列表执行某些操作,可以将find与bash $()
结构结合使用(优于反引号,因为它允许嵌套)。
find . -type f -name 'btree*.c'
将返回它们的列表。但这并不能帮助他们做些什么。
所以,让我们进一步假设您要搜索所有这些文件中的字符串“ERROR”或者全部编辑它们。您可以执行以下操作之一:
grep ERROR $(find . -type f -name 'btree*.c')
vi $(find . -type f -name 'btree*.c')
这样做。
答案 2 :(得分:2)
当我在UNIX世界时(使用tcsh(sigh ...)),我曾经有各种各样的“查找”别名/脚本设置用于搜索文件。我认为默认的“查找”语法有点笨拙,所以我曾经使用别名/脚本将“find.-print”传递给grep,这允许你使用正则表达式进行搜索:
# finds all .java files starting in current directory
find . -print | grep '\.java'
#finds all .java files whose name contains "Message"
find . -print | grep '.*Message.*\.java'
当然,上面的例子可以用普通的查找来完成,但如果你有一个更具体的搜索,grep可以帮助很多。这很好用,除非“find.-print”有太多的目录要通过递归...然后它变得非常慢。 (例如,您不希望以root“/”开始执行此操作)
答案 3 :(得分:2)
我使用 ls -R,像这样通过管道传输到 grep:
$ ls -R | grep -i "pattern"
其中 -R 表示递归列出所有文件,-i 表示不区分大小写。最后,模式可能是这样的:“std*.h”或“^io”(文件名中以“io”开头的任何内容)
答案 4 :(得分:1)
我使用此script快速查找项目中目录的文件。我发现它很有效,并通过打开和关闭一个新的缓冲区来利用Vim的自动完成功能。它还可以为您尽可能巧妙地完成,因此您通常只需键入一个或两个字符,然后在项目的任何目录中打开该文件。我开始专门使用它是因为Java项目,它为我节省了很多时间。通过键入以下内容,您只需在编辑会话时构建一次缓存:FC(目录名称)。你也可以使用。获取当前目录和所有子目录。之后你只需输入:FF(或FS来打开一个新的分割),它将打开一个新的缓冲区来选择你想要的文件。选择文件后,临时缓冲区关闭,您在所请求的文件内,可以开始编辑。另外,here是Stack Overflow上的另一个可能有用的链接。
答案 5 :(得分:0)
http://content.hccfl.edu/pollock/Unix/FindCmd.htm
linux / unix“find”命令。
答案 6 :(得分:0)
是的,bash
具有文件名完成机制。我自己不使用它们(懒得学习,我发现它并不经常使其变得紧急),但基本机制是输入前几个字符,然后是一个标签;只要名称是明确的,这将尽可能地扩展名称(可能根本不扩展)。在良好的人工页面中有大量与Emacs风格相关的命令。
答案 7 :(得分:0)
locate <file_pattern>
*** find
肯定会有效,并且可以定位特定目录。但是,此命令比locate
命令慢。在Linux操作系统上,每天早上都会构建一个包含所有目录和文件列表的数据库,locate
命令可以有效地搜索这个数据库,因此如果你想搜索那些没有的文件,那么今天创建,这将是完成这项任务的最快方式。