昨天看到群里在不少群友讨论find命令,那么今天我就和你们聊聊工做中的find命令的使用:
算法
1、find语法sql
Usage:find PATHNAME [-option] [-exec|-ok command] {} \;数据库
PATHNAME:查找的路径名vim
[option]:可选择要匹配的参数bash
[-exec|-ok command]:将查找的文件执行command操做oracle
{}:查找到的文件名ide
\;:反斜杠表明转义,分号表明结束符spa
2、find参数日志
-nameblog
按文件名字查找
-perm
按文件权限查找
-user
按文件属主查找
-group
按文件属组查找
-nouser
查找无有效属主的文件,即文件的属组在/etc/groups中不存在
-nogroup
#查找无有效属组的文件,即文件的属主在/etc/groups中不存在
-mtime(mmin) -n +n
按文件更改时间来查找文件,-n指n天(分钟)之内,+n指n天(分钟)之前
-atime(amin) -n +n
按文件访问时间来查找文件,-n指n天(分钟)之内,+n指n天(分钟)之前
-ctime(cmin) -n +n
按文件建立时间来查找文件,-n指n天(分钟)之内,+n指n天(分钟)之前
-never f1 !f2
查找更改时间比f1新但比f2旧的文件
-type [b| d| c| p| l| f]
查找块设备,目录,字符设备,管道、符号连接、普通文件
-size n[c]
查长度为n块[或n字节]的文件
-depth
查找于某一类型文件系统中的文件,这些文件系统类型一般可在/etc/fstab中找到
-mount
查文件时不跨越文件系统mount点
-follow
若是遇到符号连接文件,就跟踪连接所指的文件
-prune
忽略某个目录,若是同时使用了-depth选项,那么-prune选项将被find命令忽略。
3、find案列
一、查找指定目录下大于300M的文件,并将其移动到指定的路径中
# find ~ -size +300M # find ~ -size +300M -exec mv {} ~/sql/ \;
二、查找指定目录下大于300M的文件,并将其删除的两种方式
# find ./ -size +300M -delete # find ./ -size +300M -exec rm -rf {} \;
三、查找指定目录下大于1G而小于1.5G的文件
# find ./ -size +1G -size -1.5G
四、查找指定目录下非.sh结尾的文件的两种方法
# find ./ -not -name '*.sh' # find ./ ! -name '*.sh'
五、删除7天前对数据库的备份文件
# find /bakcup/ -type f -name '*.sql' -mtime +7 -exec rm -rf {} \;
六、查找当前目录下以.sh结尾的文件,可是排除子目录为script目录下的文件
# find . -path './script' -prune -o -name '*.sh'
七、查找当前目录下以.py结尾的文件,并将其修改成.pyc
# find ./ -name '*.py' -exec mv {} '{}c' \;
八、查找当前目录下全部文件,并把文件中的hello字符串替换成Hello
# echo 'hello world!' > test01.txt # echo 'hello teacher!' > test02.txt # find ./ -type f -exec sed -i 's@hello@Hello@g' {} \;
4、find搭配日志重点阐述
一、时间搜索
atime(access time):访问时间;指的是文件最后读取的事件,可使用touch命令更改当前时间
ctime(change time):变动时间;指的是文件自己最后被变动的事件,变动动做是chmod、chgrp、mv等
mtime(modify time):修改时间,指的是文件内容最后被修改的事件,修改动做echo重定向、vim等
二、时间语法
find PathName {-atime/-ctime/-mtime/-amin/-cmin/-mmin} [-/+]num
第一个参数:查找文件的路径名
第二个参数:前面的字母a、c、m分别表示访问、变动、修改;time为日期,min为分钟
第三个参数:不应符号表示符合这个值得,'-'表示之内的,'+'表示之前的
三、时间小练习
查找当前目录中,当天被访问过的文件:时间单位为day
# find ./ -atime 0
查找当前目录中,距离此刻5分钟之前10分钟之内被修改过的文件:时间单位为min
# find ./ -mmin -10 -min +5
另外补充一个额外的命令:xargs
此命令的使用很相似于find的exec参数,好比:
# find ./ -type f | xargs chmod 755 # find ./ -type f | xargs echo '' > /root/filename.log # find ./ -type f | xargs rm -rf
网上的一篇文章:
find mtime的事件算法:http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/