好久没更新博客了,今晚来写一篇吧。
正文之前,先来将一个小插曲。我在面试当前岗位的时候,遇到了一个面试题目:
查找出最近三天创建的.log结尾的文件并删除。
看到的时候,内心狂喜,这不很简单吗?我就三分钟写下答案然后就交卷了。结果很是意外,答案是错的!我清楚的记得我写的答案是这样的:
find / -mtime 3 -name *.log | xargs rm -f
并且在自己的虚拟机上跑了一下,操作也成功了!我就很好奇,到底是哪里出问题了呢?后来我仔仔细细查了一下,原因出在-name 后面的选项上,应该加上单引号,否则会报错。请看下面的例子:
-
[root@d ~]# ls
-
a324.sql Centos
-7.repo elasticsearch
-5.6
.8.zip
.1
output.session
-
a324.sql.tar.gz c.sh Git
-2.26
.2
-64-bit.exe s.sh
-
aa.sh elasticsearch
-5
-6
-8 grafana
-5.0
.4
-1.x86_64.rpm s.sh.tar.gz
-
a.ss elasticsearch
-5.6
.8 grafana
-5.0
.4
-1.x86_64.rpm.nak
time.
log
-
a.tar.gz elasticsearch
-5.6
.8.rpm mbox wget-
log
-
a.txt elasticsearch
-5.6
.8.zip nohup.out zz.sh
-
[root@d ~]#
find ./ -name *.rpm
-
find: paths must precede expression: grafana
-5.0
.4
-1.x86_64.rpm
-
Usage:
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [
path...] [expression]
-
[root@d ~]#
find ./ -name
'*.rpm'
-
./elasticsearch
-5.6
.8.rpm
-
./grafana
-5.0
.4
-1.x86_64.rpm
好了。开始步入正题(外面又下雨求了!好烦)
find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作。默认的操作是打印出相应的文件或者目录,这也可以使用-print选项来指定!
1、列出/app下的文件或目录
find /app
2、-name 查找.txt结尾的文件
find / -name '*.txt'
3、查找.txt结尾的文件,忽略.txt的大小写
find / -iname '*.txt'
4、-o 逻辑或操作符
-
[root
@d tests]# find .
/
-name
'*.txt'
-o
-name
'*.js'
-
.
/c.txt
-
.
/a.js
5、逻辑与 -a ,和-o差不多
6、正则-regex,匹配以.py或者.sh结尾的文件。-iregex忽略大小写。
find . -regex '.*\.\(py\|sh\)$'
7、!:否定参数 查找当前目录下非.txt结尾的文件
find ./ ! -name '*.txt'
8、基于目录深度搜索 -maxdepth N,-mindepth N。默认情况下,find 命令不会跟随符号链接,-L选项可以强制改变这种行为。
9、-type,后面可以跟-f -d -l -s -b
10、-atime用户最近一次访问文件的时间 -ctime文件元数据最后一次改变的时间 -mtime文件内容最后一次被修改的时间。
find ./ -atime 7表示第七天被访问的文件
find ./ -atime +7表示七天前被访问的文件
find ./ -atime -7表示七天内被访问的文件
-amin -cmin -mmin
11、-newer
12、-size基于大小搜索
find ./ -type f -size 7k 刚好7k
find ./ -type f -size +7k 大于7k
find ./ -type f -size -7k 小于7k
13、-perm基于权限
find . -type f -perm 644 查找权限为644的文件
14、-user zhaoyun找出zhaoyun拥有的所有文件
find . -user zhaoyun
15、find相应的操作
-print:默认动作,打印
-delete:删除
-
[root@d tests]# ls
-
a
.html
a
.js
A
.TXT c
.txt
-
[root@d tests]# find . -name *
.txt -delete
-
[root@d tests]# ls
-
a
.html
a
.js
A
.TXT
16、-exec执行命令
find命令hui