如何在Linux终端中查找特定文件?

54

我正在尝试找到我的Linux服务器上index.html的位置,想知道是否有命令可以完成这个任务。我对Linux很陌生,感谢任何能给我的帮助。


4
翻译文本:man find: http://unixhelp.ed.ac.uk/CGI/man-cgi?find。这与编程无关,请尝试访问http://linux.stackexchange.com。 - Matt Ball
从根目录开始搜索需要几天时间才能完成。而且在搜索过程中,对于某些类型的文件会产生一堆(非关键性)错误。这不是最有效率的方法。 - chown
1
请在发问前进行一些最基本的研究。 - Praveen Sripati
6
几年后,搜索“在Linux中查找文件”将其作为前十个结果之一。我很高兴这个问题被提出并得到了解答。 - Adrian Carr
你可以尝试使用locate。 - Channa
这个问题是一个重复的问题,与 如何基于通配符匹配递归查找当前和子文件夹中的所有文件? 相同。 - EvgenKo423
6个回答

114

从根目录开始查找 find / -name "index.html"

从当前路径开始查找 find . -name "index.html"


这个默认是递归的吗?我习惯在命令中看到“-r”。 - Kellen Stuart

6
以下代码行可以帮助您完成此操作。 find / -name index.html 但是,在大多数Linux服务器上,您的文件将位于/var/www或用户目录文件夹/home/(user)中,具体取决于您的设置方式。如果您使用控制面板,则很可能在您的用户文件夹下。

啊,就像下面所说的那样,查找程序可能需要一段时间才能完成... 我不知道还有其他选择... - Taylor Jasko

5

尝试使用以下命令(通过shell):

update db
locate index.html

或者:

find /var -iname "index.html"

将 /var 替换为您最好的猜测目录,但避免从 / 开始


所有其他答案都建议使用find(好吧,这个答案也建议在locate之后使用find),但是,经过几个月的使用find后,我意识到locate确实更方便!顺便问一下,“update db”是什么?我需要它吗? - shintaroid
1
@shintaroid locate 实际上并不会在您的文件系统中搜索指定的文件。它所做的是将有关文件的信息缓存到数据库中,并由给定时间间隔上的作业进行刷新。因此,updatedb 所做的只是手动更新数据库。 - Ivan Kaloyanov

4

解决方案:使用Unix命令find

find实用程序递归地遍历每个路径的目录树,对树中的每个文件评估一个表达式(由“原语”和“操作数”组成)。

  • 您可以通过控制正则表达式查询、文件类型、大小阈值、子树深度维度、组、所有权、时间戳、修改/创建日期等方式,使find操作更加高效和智能。
  • 此外,您还可以使用运算符和组合查找请求,例如或/非/与等。

传统的公式如下:

find <path> -flag <valueOfFlag>

简单示例

1.按名称查找 - 从当前位置的子目录层次结构中查找所有package.json

find . -name "package.json"

2.按名称和类型查找 - 从全部文件系统(从根层次开始)中查找所有的node_modules目录。

sudo find / -name "node_modules" -type d

复杂示例:

更有用的示例,可以展示标志选项和运算符的强大功能:

3. 正则表达式和文件类型 - 使用正则表达式查找我的应用程序位置中仅限JavaScript文件的所有JavaScript控制器变体名称。

find /user/dev/app -name "*contoller-*\.js" -type f

-type f 表示文件,-name 后面跟着一个正则表达式用于匹配 controller 字符串及其各种变体和连字符,并以 .js 结尾的相关文件。

4. 深度 - 在应用程序目录中查找所有路由模式 目录,不超过 3 级深度(仅限 app/../../..,不能更深)。

find app -name "*route*" -type d  -maxdepth 3

-type参数中d表示查找目录;-name参数可接受正则表达式,匹配任何变化的路径字符串;-maxdepth参数使查找器仅关注3级子树深度及以下,即不会查找更深的子目录(例如:<yourSearchlocation>/depth1/depth2/depth3)。

5.文件大小、所有权和或运算符 - 查找所有拥有者为root用户且文件名称为“sample”或“test”的文件,大小在1兆字节至5兆字节之间。

find . \( -name "test" -or -name "sample" \)  -user root -size +1M -size -5M

-size阈值代表着在-user表示的文件所有者过滤器所匹配的正则表达式中,大小区间为大于(+)和小于(-)之间。 -or运算符用于同时筛选两个正则表达式匹配的查询条件。

6.空文件 - 查找文件系统中的所有空目录。

find / -type d -empty

7.时间访问、修改和创建文件 - 查找在10天内在目录中创建/修改/访问的所有文件。

# creation (c)
find /test -name "*.groovy" -ctime -10d
# modification (m)
find /test -name "*.java" -mtime -10d
# access (a)
find /test -name "*.js" -atime -10d

8. 修改大小过滤器 - 查找所有在一周前到三周前修改过且小于500kb的文件,并将它们的大小呈现为列表。

find /test -name "*.java" -mtime -3w -mtime +1w -size -500k | xargs du -h

0

find /你想查找的路径 -name index.html


0
一般来说,在任何任意位置查找任何文件的最佳方式是启动终端窗口并键入经典的Unix命令“find”:
find / -name index.html -print

由于您正在查找的文件是 Web 服务器根目录中的根文件,因此找到您的 Web 服务器文档根目录可能会更容易。例如,请查看:

/var/www/*

或输入:

find /var/www -name index.html -print

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接