Linux 之 find 命令
find
命令用来在指定目录下查找文件,功能相当之强大。
官方定义为:
find - search for files in a directory hierarchy
Linux的哲学是一切皆文件,那么find的使命就是一切皆可查。
语法
使用语法为:
1 | $ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] |
比较常用的几个参数为:
-exec <执行指令>
:假设find指令的回传值为True,就执行该指令;-size <文件大小>
:查找符合指定的文件大小的文件;-mtime <24小时>
:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;-type <文件类型>
:只寻找符合指定的文件类型的文件;
无参数
如果使用该命令时,不设置任何参数,则find
命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
1 | $ ls -l |
查找小于,等于和大于100MB的文件
通过-size大小来查找文件
1 | $ find . -size -100M |
查找多长时间修改过
可以通过参数-mtime来查找文件的修改时间,比如如下可以查找当前目录下最近60天没有被修改的文件。
1 | $ find . -mtime +60 |
稍微复杂但是很有用的命令
我经常把 find
命令和他的选项 exec
一起使用,比如我想查找一个目录中的所有文件并将其更改其权限。可以通过以下简单命令完成:
1 | $ find /path/ -type f -exec chmod 644 {} \; |
这个命令会递归搜索指定目录内/path/下的所有文件,并对找到的文件执行 chmod
命令。
一个搜索文件的好例子是:
1 | find /home/user -type f |
这个命令会搜索 /home/user 目录下的所有文件。find 命令真的很强大,你可以传递更多选项给它使得你的搜索更加详细。如果你想搜索超过特定大小的文件,可以使用:
1 | # find . -type f -size 10M |
上面的命令会搜索当前目录中所有大于 10M 的文件。确保不要在你 Linux 系统的根目录运行该命令,因为这可能导致你的机器 I/O 瓶颈。
选项
1 | -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算; |
如何查找在最近几天没有被修改过的文件?
下面这条命令会列出在当前目录下在最近60天没有被修改过文件
# find . -mtime +60
如何查找在最近几天被修改的文件?
下面这条命令会列出在当前目录下在最近2天被修改过文件
# find . –mtime -2
所以+-可以查找未被修改和修改过的文件。
如何删除目录/home/aaa/test中扩展名为.tar.gz并且大于100M的压缩文件?
先来一个例子:
我想查找后缀为tar.gz的,大于100M的文件,并详细查看,可以使用
find /home/aaa/test -type f -name *.tar.gz -size +100M -exec ls -l {} ;
find / home/aaa/test -type f -name *.tar.gz -size +100M -exec rm -f {} ;
find
◦find [搜索范围] [匹配条件]
◦1. find /etc –name passwd
◦2.
◦3. find / -user yourname
◦4. find / -amin/-cmin/-mmin
amin – access访问时间
cmin – change 文件属性
mmin – modify 文件内容
◦ 5. find / -type f/d/l 文件/目录/软链接
locate
◦locate filename
◦/var/lib/mlocate/mlocate.db && updated
which && whereis 查找命令
在home目录查找以.txt结尾的文件名
1 | find /home -name "*.txt" |
在home目录查找以.txt结尾的文件名,但是忽略大小写
1 | find /home -iname "*.txt" |
在home目录查找以.txt和.pdf结尾的文件名,但是忽略大小写
1 | find /home -name "*.txt" -o -name ".pdf" |
匹配文件路径或者文件
1 | find . -path "*path*" |
否定参数
找出home目录下不是以.txt结尾的文件
1 | find /home ! -name "*.txt" |
根据文件类型进行搜索
1 | find . -type 类型参数 |
其中类型参数如下:
- f 普通文件
- l 符号链接
- d 目录
- c 字符设备
- b 块设备
- s 套接字
- p FIFO
在home目录查找以.txt结尾的文件名,但是忽略大小写
向下最大深度限制为3
1 | find . -maxdepth 3 -type f |
根据文件时间戳进行搜索
1 | find . -type f 时间戳 |
每个文件都有3个时间戳
- 访问时间 -atime 天 -amin 分钟 :用户最后一次访问时间
- 修改时间 -mtime 天 -mmin 分钟 :文件最后一次修改时间
- 变化时间 -ctime 天 -cmin 分钟 :文件数据元(如权限)最后一次修改时间
搜索最近7天内访问过的文件
1 | find . -type f -atime -7 |
搜索恰好7天访问过的文件
1 | find . -type f -atime 7 |
搜索超过7天内访问过的文件
1 | find . -type f -atime +7 |