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