从命令行查找目录中的文件

时间:2009-03-18 02:15:02

标签: bash shell autocomplete

在edclipse / ides中,例如eclipse和textmate,可以快速查找项目目录中的特定文件。

是否有类似的工具可以在目录(递归),bash或其他shell中对文件名进行完整路径完成?

我有很多目录的项目,而且有很深的目录(叹气,java)。 命中shell中的选项卡只循环直接目录中的文件,这还不够= /

8 个答案:

答案 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 $()结构结合使用(优于反引号,因为它允许嵌套)。

例如,假设您位于项目目录的顶层,并且需要以“btree”开头的所有C文件的列表。命令:

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命令可以有效地搜索这个数据库,因此如果你想搜索那些没有的文件,那么今天创建,这将是完成这项任务的最快方式。