如何从 Linux 终端找到特定文件?

Posted

技术标签:

【中文标题】如何从 Linux 终端找到特定文件?【英文标题】:How can I find a specific file from a Linux terminal? 【发布时间】:2011-11-19 13:06:30 【问题描述】:

我正在尝试查找index.html 在我的 linux 服务器上的位置,并且想知道是否有命令可以执行此操作。对 linux 非常陌生,感谢我能得到的任何帮助。

【问题讨论】:

man find: unixhelp.ed.ac.uk/CGI/man-cgi?find。这不是立即与编程相关的;试试linux.stackexchange.com。 从 / 搜索需要几天时间才能完成。并在搜索时为某些类型的文件吐出一堆(非关键)错误。不是最有效的。 在发布问题之前请做一些最低限度的研究。 几年后,谷歌搜索“在 linux 中查找文件”将其列为前 10 名结果。我很高兴有人提出并回答了这个问题。 你也可以试试 locate 【参考方案1】:

从根路径查找find / -name "index.html"

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

【讨论】:

【参考方案2】:

下面这行代码会帮你搞定。

find / -name index.html

但是,在大多数 Linux 服务器上,您的文件将位于 /var/www 或您的用户目录文件夹 /home/(user) 中,具体取决于您的设置方式。如果您使用的是控制面板,它很可能位于您的用户文件夹下。

【讨论】:

啊,就像下面所说的那样,find 程序可能需要一段时间才能完成...我不知道还有其他选项...【参考方案3】:

试试这个(通过 shell):

update db
locate index.html

或者:

find /var -iname "index.html"

将 /var 替换为您对它所在目录的最佳猜测,但避免从 / 开始

【讨论】:

所有其他答案都建议使用find(好吧,这个答案也建议使用find,但仅在locate之后),但是,在使用find几个月后,我意识到locate确实更方便!顺便问一下,update db 是什么?我需要它吗? @shintaroid locate 实际上并不在您的文件系统上搜索给定文件。它的作用是将有关文件的信息缓存到数据库中,该数据库在给定的时间间隔内由作业刷新。所以 updatedb 所做的只是手动更新数据库。【参考方案4】:

解决方案:使用unix命令find

find 实用程序递归地向下遍历每个路径的目录树 列出,评估一个表达式(由'primaries'和 '操作数')在 树中的每个文件。

您可以通过使用 正则表达式查询、文件类型、大小阈值、深度 子树、组、所有权、时间戳、修改/创建日期等维度。 此外,您还可以使用运算符并组合查找请求,例如 或/不/等...

传统的公式是:

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 与控制器字符串的任何变体以及最后带有.js 的破折号

4.深度-在应用目录不超过3维(app/../../)中查找所有路由模式目录 .. 只是,没有更深)

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

-type d 表示与正则表达式相关的目录-name 到路由字符串-maxdepth 的任何变体,使查找器专注于3 个子树深度而不是更多&lt;yourSearchlocation&gt;/depth1/depth2/depth3)

5.文件大小、所有权和 OR 运算符 - 查找 root 用户拥有的所有名称为“sample”或“test”的大于 1 Mega 且小于 5 Mega 的文件。 p>

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

-size 阈值表示大于 (+) 和小于 (-) 之间的范围-user 表示文件所有者-or 运算符过滤查询两个正则表达式匹配

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

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.修改大小过滤器 - 查找在一周前到 3 周前完全修改且小于 500kb 的所有文件,并将其大小显示为列表

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

【讨论】:

【参考方案5】:

find /the_path_you_want_to_find -name index.html

【讨论】:

【参考方案6】:

一般来说,在任意位置查找任何文件的最佳方法是启动终端窗口并输入经典的 Unix 命令“find”:

find / -name index.html -print

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

/var/www/*

或输入:

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

【讨论】:

以上是关于如何从 Linux 终端找到特定文件?的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu中在终端下如何查找具有某一特定字符串的文件?

如何从终端窗口在 Linux 中创建文件? [关闭]

linux 如何从远程终端下载文件到本地磁盘? 我的系统也是linux的,想从远程终端(ssh.)上复制文件到本地

如何从 C/C++ 程序中找到终端列的数量? [复制]

debian linux如何进入终端

如何在 Linux 终端中有效地搜索文件