在Linux中使用find命令行查找文件

find是一个基于条件机制递归过滤文件系统中对象的命令。使用find搜索文件系统中的文件或目录。使用-exec标志,可以在同一命令中找到并立即处理文件。

个人推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

按名称或扩展名查找Linux文件

使用find命令行按名称或扩展名查找特定文件。下面的示例是在/home/username/中查到以.err结尾的所有文件:

find /home/username/ -name "*.err"

常见的Linux查找命令和语法

find 表达式采用以下形式:

find options starting/path expression
  • options属性将控制find进程的行为和优化方法。
  • starting/path属性将定义find开始过滤的顶级目录。
  • expression属性控制搜索目录层次结构以生成输出的测试。

下面是示例命令:

find -O3 -L /var/www/ -name "*.html"

此命令启用最大优化级别(-O3)并允许find遵循符号链接(-L)。在/var/www/下面的整个目录树中搜索以.html结尾的文件。

基本示例

命令

描述

find . -name testfile.txt

在当前和子目录中找到名为testfile.txt的文件。

find /home -name *.jpg

在/home中查找所有以.jpg结尾的文件

find . -type f -empty

在当前目录中查找空文件。

find /home -user exampleuser -mtime 7 -iname ".db"

查找用户名为exampleuser的用户在过去7天内修改的所有.db文件(忽略文本大小写)。

查找选项和优化

默认配置find将忽略快捷方式文件。如果要find跟随并返回符号链接,可以将-L选项添加到命令中,如上例所示。

find优化其过滤策略以提高性能。三个可供用户选择的优化级别被指定为-O1-O2-O3。在运行所有其他测试之前,-O1优化是默认值并强制find基于文件名进行过滤。

-02级别上的优化优先考虑文件名过滤器,就像在-01中一样,然后在处理其他更占用资源的条件之前运行所有文件类型过滤。级别-03优化允许find执行最严格的优化,并根据相关费用和成功的可能性重新安排所有测试。

命令

描述

-O1

(默认)首先根据文件名过滤。

-O2

首先是文件名,然后是文件类型。

-O3

允许find根据资源和可能性的有效使用自动重新排序搜索。成功

-maxdepth X

搜索当前目录以及所有X级别的子目录。

-iname

搜索时不考虑文本情况。

-not

仅返回与测试用例不匹配的结果。

-type f

搜索文件。

-type d

搜索目录。

按修改时间查找文件

find命令包含根据上次修改文件的时间过滤目录层次结构的功能:

find / -name "*conf" -mtime 7
find /home/exampleuser/ -name "*conf" -mtime 3

第一个命令返回整个文件系统中所有文件的列表,这些文件以字符conf结尾并在过去7天内被修改。第二个命令过滤exampleuser用户的主目录,查找名称以conf字符结尾并在前3天内被修改的文件。

使用Grep根据内容查找文件

find命令只能根据文件名和元数据过滤目录层次结构。如果您需要根据文件内容进行搜索,请使用grep等工具。请考虑以下示例:

find . -type f -exec grep "example" '{}' \; -print

这将搜索当前目录层次结构(.)中的每个文件(-type f),然后为每个满足条件的文件运行grep“example”命令。匹配的文件打印在屏幕上(-print)。花括号({})是查找匹配结果的占位符。{}用单引号(')括起来,以避免将格式不正确的文件名传递给grepexec命令以分号(;)结束,分号应该转义(\;),以避免shell对其进行解释。

在执行-exec选项之前,这种命令可能已使用xargs命令生成类似的输出:

find . -type f -print | xargs grep "example"

如何使用查找命令查找和处理文件

exec选项对匹配find表达式的每个对象运行命令。考虑下面的例子::

find . -name "rc.conf" -exec chmod o+r '{}' \;

这将为命名为rc的文件过滤当前层次结构(.)中的每个对象。运行chmod o+r命令修改查找结果的文件权限。

与-exec一起运行的命令在find进程的根目录中执行。使用-execdir在匹配所在的目录中执行指定的命令。这可能会减轻安全问题,并为某些操作产生更理想的性能。

-exec-execdir选项运行时没有进一步提示。如果您希望在采取行动之前得到提示,请将-exec替换为-ok-execdir替换为-okdir

如何在Linux命令行查找和删除文件

警告 请谨慎使用此选项。

-delete选项添加到匹配表达式的末尾,这样就能删除所有匹配的文件。请务必确定查找结果与您要删除的文件匹配。

在以下示例中,find查找从当前目录开始并完全递归到目录树中的层次结构中的所有文件。在此示例中,find将删除以.bak字符结尾的所有文件:

find . -name "*.bak" -delete

总结

怎样,你学会了嘛?赶快购买服务器尝试下吧! 想要学习更多相关知识,请访问腾讯云云+社区


参考文献:《Find Files in Linux, Using the Command Line》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

Spark如何在一个SparkContext中提交多个任务

64940
来自专栏一个会写诗的程序员的博客

java代码执行过程简介

代码即数据,数据即代码,而我们的数据是保存在文件上的,所以我们说文件就是数据,一切代码都是文件。

12130
来自专栏Java成神之路

Oracle_Exception_01_The Network Adapter could not establish the connection

端口号错误:一般不会错误但可能使用多个oracle版本,导致端口号为1521的情况。  修改为正确的端口号,执行下面第2步。   

8920
来自专栏Java爬坑系列

【JAVA零基础入门系列】Day1 开发环境搭建

一、安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可。 http://www.oracle.com/technetwork/java/...

21080
来自专栏JadePeng的技术博客

Jupyter notebook安装与使用

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 安装 安装python...

39660
来自专栏云计算与大数据

研发:理解系统调用nice

允许进程改变它们的优先级。 包含在increment参数中的整数值用来修改进程描述符的nice字段。

12930
来自专栏Python小屋

Python实现定时自动关闭的tkinter窗口

功能简要说明:程序运行后10秒钟自动关闭。 技术要点:tkinter应用程序的destroy()方法,多线程编程。 代码截图: ? 运行效果: ?

38660
来自专栏雨过天晴

转 Mac OS/Linux命令查询网络端口占用情况

14630
来自专栏人工智能LeadAI

Python中的相对文件路径的调用

先让我们来看看一个用到相对文件路径的函数调用的问题。假设现在有两个脚本文件main.py和func.py,他们的路径关系是:

19140
来自专栏邹立巍的专栏

find 命令详解

find 命令是我们日常工作中比较常用的 Linux 命令。全面的掌握这个命令可以使很多操作达到事半功倍的效果。如果对 find 命令有以下这些疑惑,本文都能帮...

55410

扫码关注云+社区

领取腾讯云代金券