Linux shell 学习笔记 之 find命令的使用
今天我们来谈谈Linux下find命令的使用,find命令常用于在unix/linux 下进行文件的查找。
一.命令的工作方式:
find命令的工作方式:沿着文件的层次结构向下遍历,当匹配到符合条件的文件,则执行相应的操作。
二 find命令的使用
1.列出指定目录下的所有文件以及文件夹
$ find basepath # basepath 即为要查找的位置,find 命令会从该位置向下查找。
例如 find /home/lyf -print #打印出/home/lyf 目录下的所有文件和目录列表
-print 选项指明打印出匹配文件的文件名(路径)
2.根据文件名进行搜索
$ find basepath -name "*.txt" -print #查找basepath及其子目录下所有txt格式的文件列表
-name 选项的参数指定了文件名所必须匹配的字符串。
除了使用name选项还可以使用-iname选项
-iname选项与-name选项类似,但在进行查找匹配的时候会忽略掉大小写。
-path的参数可以使用通配符来匹配文件路径或文件
find还可以使用“!”否定参数的含义
$ find basepath ! -name "*.txt" -print #查找basepath及其子目录下所有不是txt格式的文件列表.
3.按照目录的深度进行搜索
$ find basepath -maxdepth 2 -type -f -print #最多向下遍历两级子目录
$ find basepath -mindepth 2 -type -f print #从当前目录的2层子目录中开始遍历
find命令在使用的时候会遍历所有的子目录,在这里我们可以采用maxdepth与mindepth限制进行遍历的深度。
4.按照文件的类型进行查找
我们知道在unix/linux下系统将一切都视为文件,然而文件也具有不同的类型,如普通的文件,字符设备,目录,块设备等等。
在使用find命令的时候我们可以使用-type 选项对文件进行相应的过滤。
$ find basepath -type d -print #只列出所有的目录
$ find basepath -type f -print #只列出所有的文件
$ find basepath -type l -print #只列出所有符合链接
$ find basepath -type c -print #只列出所有的字符设备
$ find basepath -type b -print #只列出所有的块设备
$ find basepath -type s -print #只列出所有的套接字
$ find basepath -type p -print #只列出所有的FIFO
5.按照文件的时间进行查找(包括文件最后被访问的时间atime,文件最后被修改的时间mtime,文件元数据改变时间ctime)
先对这几个时间说说
atime(访问时间):即用户最近一次访问文件的时间
mtime(修改时间):即文件内容最后一次被修改的时间
ctime(变化时间):文件元数据(metadata,如权限或所有权)最后一次被改变的时间。
选项 -atime,-mtime,-ctime可以作为find命令的时间参数,它们可以使用整数值的形式给出,单位为天,这些值可以带有符
号 -(小于),+(大于).
$ find basepath -type f -atime +6 -print # 列出访问时间超过6天的所有文件
$ find basepath -type f -atime 6 -print #列出访问时间恰好为6天的所有文件
$ find basepath -type f -atime -6 -print #列出访问时间在6天前的所有文件
-mtime 与-ctime选项与 -atime选项使用方法相同。
除了使用基于单位为天的参数选项 -atime ,-ctime,-mtime 还可以使用基于分钟的计数单位如
-amin(访问时间),-mmin(修改时间),-cmin(改变时间) 这些选项都是基于分钟计数的.
除了使用上述的选项外在使用find命令的时候还可以使用-newer选项,使用-newer,我们可以指定一个用于比较时间戳的参考
文件,然后找出比参考文件更新的(更长的修改时间)所有文件。
$ find basepath -type f -newer a.txt -print # 找出比a.txt 修改时间更长的所有文件
6.基于文件的大小进行查找,在使用find命令的时候我们可以按照文件的大小进行查找。
$ find basepath -type f -size +2k #列出所有大于2k的文件
除了k 之外还有如下的参数可以供选择:
b 块(512字节)
c 字节
w 字(2字节)
k 千字节
M 兆字节
G 千兆字节
7.基于文件的权限和所有权进行匹配。
$ find basepath -type f -perm 644 -print #列出目录下文件权限为644 的所有文件
也可以按照文件的所有权进行文件的匹配
$ find basepath -type f -user root -print #列出目录下root用户所拥有的所有文件