如何从命令行在 Linux 中搜索文件
在 Linux 上搜索文件最强大的方法是使用命令行。就像Windows 有一个find命令一样,Linux 也有。UNIX 命令find可以非常轻松地找到您可能正在寻找的任何类型的文件。以正确的方式执行,find甚至可以查看您的文件内部以识别特定的文本字符串,并且您可以将搜索范围缩小到最近修改的那些文件。
基本用法
find 的基本用法如下所示:
find /home/jeff -name “*.jpg”
该命令将在我的主目录中搜索所有以.jpg结尾的文件。不过,该命令还可以完成更多工作。
遵循符号链接
默认情况下,find命令将忽略符号链接。但是,以下命令将跟随这些链接:
find -O3 -L /var/www/ -name “*.html”
在上面的示例中,该命令将列出/var/www目录树中的所有 HTML 文件。
查找空文件
现在,假设您想识别目录中的所有空文件。以下命令可以做到这一点:
find . -type f -empty
这里的关键是-type 和-empty 参数,用于代替前面示例中的-name标志。
进一步的例子
让我们看一个更基本的示例,它将返回在前 6 天内更改的文件。
find /home -user randomperson -mtime 6 -iname "*.db"
在此命令中,将列出所有以.db结尾的文件,忽略文本大小写,但前提是文件已在过去 6 天内由名为randomperson的用户修改。
查找 Linux 文件的有用选项和优化
附加标志可以控制find应用其搜索测试的顺序。默认情况下,find首先根据文件名过滤搜索结果,然后再运行任何其他测试。该标志将是-O1,但实际上没有理由包含它。
如果您传递-O2标志,则根据文件名查找过滤器,然后是文件类型。第三个选项-O3会根据资源的有效利用和返回相关结果的可能性自动重新排序搜索。
您可以使用以下参数更改更多默认行为:
- -maxdepth X:搜索指定目录及其子目录,最大深度为X。
- -iname:搜索文件,忽略大小写。
- -not:只产生与指定测试用例不匹配的结果。
- -type f:仅查找文件
- -type d:仅查找目录
- -mtime X:仅返回前X天修改过的文件。
使用 Grep 根据内容定位文件
find单独使用时,只会根据文件名和元数据过滤您的文件和目录。但是,可以更深入地挖掘并使用另一个 Linux 命令根据文件包含的内容来搜索文件。
用于此的工具是久经考验的真正grep命令。这是它的工作原理。
find . -type f -exec grep "forinstance" '{}' \; -print
此命令将查看当前目录树中的每个文件( -type f )(在命令中由.注明)。接下来,它在每个文件上运行grep “例如”,打印包含forinstance的文件。
在上述命令中,花括号 ( {} ) 是find命令返回的文件结果的占位符。它们放在单引号 ( ‘ ) 内,以防止向grep发送畸形的文件名。
-exec命令以分号 ( ; ) 结束,它需要转义 ( \; ),因此 Linux 不会尝试将其解释为另一个命令或参数。
使用 Exec 让您的查找结果更进一步
现在您知道如何使用-exec将查找结果发送到另一个命令,您将有兴趣了解您可以做的不仅仅是grep搜索结果。事实上,这种能力使得快速轻松地批量修改文件变得非常容易。
find . -name "rc.conf" -exec chmod o+r '{}' \;
上面的命令由/etc目录中的 root 用户发出,将搜索所有名为rc.conf的文件。它将更改每个文件的权限,以授予文件所有者读取权限(chmod o+r)。
请记住,-exec将从 Linux 安装的根目录运行。如果您希望从包含匹配文件的目录运行附加命令,请改用-execdir。
默认情况下,-exec和-execdir将继续自行不间断地运行。如果您希望在第二个命令执行任何操作之前看到提示,请分别将选项替换为-ok或-okdir。
要真正充分利用find ,阅读该命令的手册条目至关重要。
如何使用 GUI 在 Linux 中搜索文件
许多 Linux 的 GUI 文件管理器也将支持搜索。在 Ubuntu 中,您可以使用Files应用程序搜索特定文件。只需单击 Dock 中的文件夹图标,然后单击放大镜。
此 GUI 工具允许您按文件类型以及上次访问或修改文件的时间进行过滤。此选项所没有的是在搜索结果中快速运行其他命令的能力。