Linux find 精讲与实战
目标
本文的目标是帮你轻松读懂下面这条 shell 语句,并能够熟练 find 命令查找文件。
$ find /home/tides/logs -mtime +7 -exec rm {} \;
find 语法
首先,你需要先了解一下 find 的基本语法
find path -option [ -print ] [ -exec -ok command ] {} \;
参数说明:
1)path:要查找的目录路径
2)exec:对匹配的文件执行该参数所给出的 shell 命令 形式为 command {} ;,注意{}与 ; 之间有空格 ”{}“为占位符,“;“用来结束命令(command 命令可以接收多个参数,不知道要在哪里结束,所以需要指定结束位置)
3)ok:与exec作用相同, 区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
-mindepth 最小目录层级
-maxdepth 最大目录层级
-atime n : 在过去 n 天内被读取过的文件
-mtime n : 在过去 n 天内被修改过的文件
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : n 替换问文件大小,常用k、M、G等。
-type c : 文件类型是 c (d: 目录,f: 一般文件)的文件。
详解
1、"find /home/tides/logs -mtime +7" 的意思是:在 /home/tides/logs 目录下查找最后修改日期超过 7 天的(日志)文件
2、-exec 后面是要对查找到的文件执行的命令(即 rm 删除操作)
3、"{}" 是占位符,"find /home/tides/logs -mtime +7" 查找到的文件会被填补到这个位置
4、";" 是 -exec 的结束标识
化错误为真知
$ find /home/tides/logs -mtime +7 -exec rm {}
find: -exec: no terminating ";" or "+"
从上面的报错信息,我们可以知道需要为 -exec 指定结束标识 ";" 或 "+"
延伸与实战
查找文件 size 介于 2500k - 4000k 之间的文件
$ find ./ -size +2500k -size -4000k -exec ls -lh {} \;
-rw-r--r-- 1 styd develop 3.8M Dec 28 18:10 ./master-stdout.log.20211228.181040
-rw-r--r-- 1 styd develop 3.0M Jan 4 11:20 ./master-stdout.log.20220104.112032
小结
1、find 命令主要用于查找文件
2、“{}” 是占位符
3、“;” 是一个结束标识,还可以使用 “';'”、“+” 和 “'+'” 代替
4、注意 -size 单位是区分大小写的,k、M、G
本文地址:https://www.tides.cn/p_linux-find-demo