Linux find命令

简介:
2016-05-09 19:56 by pursuer.chen, 116 阅读, 0 评论, 收藏, 编辑

介绍

find命令是Linux中最主要的几个命令之一,可以用来查找文件和对查找出来文件执行特定的操作,是使用非常频繁的一个命令,接下来就来看看它的主要的一些用法。

 

语法

find  <目录列表>  <检索方式>  [<执行动作>]

 

目录列表

目录列表是find检索的目录,目录可以随便指定,可以指定多个目录用空格隔开,当前目录可以用“.”,如果要遍历指定目录的子目录可以使用-P选项,在centos中find命令默认是会遍历子目录的

 

检索方式

1)根据文件名称进行检索,也是最常用的检索方式,

 -name <文件名称> 例如:

find /dev -name "vcsa*"

-iname <文件名称>:不文件名称的大小写

 

注意:文件名称可以使用通配符进行查询,文件名称使用双引号

2)根据文件类型进行检索,可以单独使用也可以放在-name 之后使用,这里的文件类型其实就是文件的权限的第一个字符。

-type <文件类型>

  • f:一般文件
  • d:目录文件
  • c:字符设备文件
  • b:块设备文件
  • p:管道文件
  • l:符号链接
  • s:套接字

例如:

find /dev -name "vcsa*" -type c

3)根据时间进行检索

  • 访问时间(-atime(24小时),-amin(分钟)):用户最近一次访问时间。
  • 修改时间(-mtime(24小时),-mmin(分钟)):文件最后一次修改时间。
  • 变化时间(-ctime(24小时),-cmin(分钟)):文件数据元(例如权限等)最后一次修改时间。
  • -newer  <文件名称>:查询

    修改时间比<文件名称>所指定文件更加新的文件

对于文件的这三个时间可以使用stat命令进行查询:

Access:atime,对一个文件进行读操作会修改这个时间,比如cat、more、less。ls、stat命令都不会修改文件的访问时间。

Modify:mtime,对文件进行修改修改操作会更新这个时间,比如vim操作,这个时间也是默认的文件显示时间。

Change:ctime,对修改文件属性会更新这时间,比如chmod,chown操作

 

注意:

-mtime -1:一天内修改过的文件;比如当前时间是2016-05-09 20:00:00,那么-mtime -1只能查询到修改时间为[2016-05-08 20:00:01-2016-05-09 20:00:00]的文件。

-mtime 1:修改时间早于用当前时间-24小时之前的24小时文件,比如当前时间是2016-05-09 20:00:00,那么-mtime 1只能查询到修改时间为[2016-05-07 20:00:00-2016-05-08 20:00:00]的文件。

-mtime +1:一天前修改过的文件;比如当前时间是2016-05-09 20:00:00,那么-mtime +1只能查询到修改时间为2016-05-07 19:59:59之前的文件。

其实mtime的这三个参数正好包括小于等于当前时间的所有时间值。

 

 例:查询以2016开头且修改时间正好是1天前的文件目录

find . -name "2016*" -type d -mtime 1

4)根据文件大小进行检索

-size <文件大小>:默认的单位是K,也可以指定以下单位,还可以在文件大小前面使用+-符合分别代表大于或小于当前大小的文件,默认是等于

b : 块(512Byte)

c :Byte

w : 字(2Byte)

k :KB

M :MB

G :GB

例如:

1.在当前目录查询以2016开头大小等于4096字节的目录。

find . -name "2016*"  -type d -size 4096c

2.在当前目录查询以2016开头大小大于4096字节的目录。

find . -name "2016*"  -type d -size +4096c

3.在当前目录查询以2016开头大小小于于4096字节的目录。

find . -name "2016*"  -type d -size -4096c

-empty:查询文件大小为0byte的文件或者文件目录下面是空的目录

find . -type d -size +4000c -empty

 

注意:检索方式中涉及的检索访问都可以单独使用,也可以组合一起使用。

以上的<检索方式>还可以通过逻辑运算进行组合。这些逻辑运算包括:

  • 与:即.and.操作,无须特别算符表达,只须将检索方式全部列出,中间用空格分开即可。
  • 或:即.or.操作,用算符-o表示,当两个检索条件是“或”关系时,将“-o”放在两个检索条件之间。
  • 否:即.not.操作,用算符!表示。

 

可以使用()将一些条件作为一个组合,但是()需要用转义符“\”将其写为“\(”和“\)”。

例如:查询不是以2016或者name开头的目录

find . ! \( -name "2016*" -o -name "name*" \) -type d

5)其它的一些检索条件:

复制代码
-link  <数目>:根据文件的连接数进行检索
-uid <拥有者用户id>:根据文件所属用户id进行检索
-user <拥有者账号名称>:根据文件的拥有者进行检索
-gid <组id>:根据文件所属组id进行检索
-group <组名称>:根据文件所属组名进行检索
-fstype <文件系统类型>:根据文件系统类型进行检索
-maxdepth<目录层级>:设置最大目录层级,默认find是一直往下遍历,如果只需要在当前目录进行查找,可以使用-maxdepth 1
-mindepth<目录层级>:设置最小目录层级
-perm:根据文件的权限进行检索,比如755
复制代码

 

执行动作

-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-exec  <命令>  \;:如果命令中要使用检索出的文件名称的话,{}符号接收find查找出来的文件,注意一定不要漏掉了“\;”

 

例如:

1.将查找出来的空文件进行删除

find . -empty -type f -exec rm {} \;

2.将2016开头的目录和子文件权限修改为750

find . -name "2016*" -type d -exec chmod -R 750 {} \;

3.结合grep 使用,查找文件aaa以a开头的行的数量

find . -name "aaa" -exec grep '^a' {} \; |wc -l

4.拷贝,将find查找到的文件拷贝到/test目录

find . -maxdepth 1 -name "var*" -exec cp {} /test/ \; 

 

注意:-exec后面无法接多个命令,但是可以执行脚本,比如 -exec ./scriptname

使用正则表达式进行匹配

 -name默认是支持通配符的匹配方式,如果要使用正则表达式的的方式进行匹配查找则需要使用:

-regex:

-iregex:忽略大小写

 

注意:find命令的参数也是根据先后顺序进行执行的,所以有的参数必须放在前面,比如查找的目录应该是在第一位,-maxdepth<目录层级>这个参数一般放在-name之前作为第二个参数,如果往后放会影响效率

再比如有些参数-type应该放在 -name之后

总结

find中要对查找出来的文件执行操作基本上需要经过“-exec {} \;”    。其中wc -l操作除外。

 

 





本文转自pursuer.chen(陈敏华)博客园博客,原文链接:http://www.cnblogs.com/chenmh/p/5474423.html,如需转载请自行联系原作者

目录
打赏
0
0
0
0
20
分享
相关文章
|
23天前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
57 23
Linux系统之whereis命令的基本使用
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
406 8
|
4月前
|
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1241 6
|
10天前
|
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
72 25
|
8天前
|
Linux查看内存命令
1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h • -h 选项:以易读的格式(如GB、MB)显示内存大小。 输出示例: total used free shared buff/cache available Mem: 15Gi 4.7Gi 4.1Gi 288Mi 6.6Gi 9.9Gi Swap: 2.0Gi 0B 2.0Gi • to
23 2
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
49 11
|
4月前
|
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
126 56
|
3月前
|
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
121 14
Linux 10 个“who”命令示例
|
3月前
|
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
269 20
|
3月前
|
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
174 8