Find file in directory from command line
在Eclipse和TextMate等编辑器/IDES中,有一些快捷方式可以快速地在项目目录中找到特定的文件。
在bash或其他shell中,是否有类似的工具可以对目录中的文件名(递归地)执行完整的路径完成?
我有很多目录的项目,深的项目(叹息,Java)。在shell中点击tab只会循环访问直接目录中的文件,这还不够=/
1 2 | find /root/directory/to/search -name 'filename.*' # Directory is optional (defaults to cwd) |
支持标准的Unix全局设置。有关更多信息,请参阅
如果使用VIM,可以使用:
1 | :e **/filename.cpp |
或
如果您想对文件列表做些什么,可以使用find与bash
例如,假设您处于项目目录的顶层,并且您想要一个以"btree"开头的所有C文件的列表。命令:
1 | find . -type f -name 'btree*.c' |
将返回它们的列表。但这并不能真正帮助他们做些事情。
因此,让我们进一步假设您想要搜索所有这些文件中的字符串"错误"或编辑它们。您可以执行以下操作之一:
1 2 | grep ERROR $(find . -type f -name 'btree*.c') vi $(find . -type f -name 'btree*.c') |
这样做。
当我在Unix世界(使用tcsh(sigh…)时,我使用各种"查找"别名/脚本设置来搜索文件。我认为默认的"find"语法有点笨拙,所以我以前用别名/脚本来管道"find"。-打印到grep中,它允许您使用正则表达式进行搜索:
1 2 3 4 5 | # 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会有很大帮助。除非"找到",否则这个方法很有效。-print"目录太多,无法循环使用…然后它变得相当慢。(例如,您不希望从根目录"/"开始执行此操作)
我使用这个脚本可以快速地在项目的目录中找到文件。我发现它工作得很好,并且通过打开和关闭搜索的新缓冲区来利用Vim的自动完成功能。它还可以为您智能地完成尽可能多的工作,因此您通常只需键入一两个字符,然后在项目中的任何目录中打开文件。我开始使用它特别是因为一个Java项目,它节省了我很多时间。当您开始编辑会话时,只需输入:fc(目录名)一次构建缓存。您也可以使用。获取当前目录和所有子目录。之后,只需键入:ff(或fs以打开新的拆分),它将打开一个新的缓冲区以选择所需的文件。选择文件后,临时缓冲区将关闭,并且您位于请求的文件中,可以开始编辑。此外,这里还有另一个关于堆栈溢出的链接,可能会有所帮助。
***
是的,
http://content.hccfl.edu/pollock/unix/findcmd.htm(中文)
linux/unix"find"命令。