原帖及讨论:http://bbs.bccn.net/thread-210146-1-1.html 在系统管理中find命令无疑是一个功能很强大的命令.这里我只做一些常用的简单的介绍,就当抛砖引玉吧.其它的参数的作用,相信大家都可以通过以后的学习和摸索来慢慢的进行了解.
0.文件准备 [root@localhost example]# tree . |-- example1.conf |-- example2.conf |-- find命令详解.txt |-- subexample1 | `-- example1.conf `-- subexample2 `-- example1.conf
2 directories, 5 files [root@localhost example]# ls -l #注意example1.conf与example2.conf文件的属主和权限不同,参考ls l命令 总计 40 -rw-rw-rw- 1 root gxlinux 53 04-19 15:01 example1.conf -rw-rw-r-- 1 gxlinux gxlinux 0 04-19 14:57 example2.conf -rw-rw-r-- 1 gxlinux gxlinux 972 04-19 16:41 find命令详解.txt drwxrwxr-x 2 gxlinux gxlinux 4096 04-19 15:07 subexample1 drwxrwxr-x 2 gxlinux gxlinux 4096 04-19 15:07 subexample2 [root@localhost example]# cat example1.conf Linux Fedora Redhat CentOS DataBase MySQL MSSQL # . -表示当前目录(点号表示当前目录)
1.type参数 [root@localhost example]# find . -type d #查找目录 . ./subexample1 ./subexample2 [root@localhost example]# find . -type f #查找普通文件 ./example1.conf ./subexample1/example1.conf ./example2.conf ./subexample2/example1.conf #b-块设备文件 c-字符设备文件 p-管道文件 l-符号链接文件
2.user参数 [root@localhost example]# find . -user root #查找当前目录下属主为root的文件或目录 ./example1.conf #同理group参数,表示按照所属的组来查找
3.perm参数 [root@localhost example]# find . -perm 666 #查找权限为rw-rw-rw-的文件或目录 #r、w、x分别表示4、2、1,rw-相加得6 ./example1.conf
4.name参数 [root@localhost example]# find . -name "example1*"#查找文件名以example1开头的文件或目录(*是正则表达式,匹配任意个字符,下面的[1-2]匹配1到2,参考正则表达式) ./example1.conf ./subexample1/example1.conf ./subexample2/example1.conf [root@localhost example]# find . -name "example[1-2]*" ./example1.conf ./subexample1/example1.conf ./example2.conf ./subexample2/example1.conf
5.size参数 [root@localhost example]# find . -size +50c -type f #查找大于50字节的普通文件 ./example1.conf ./find命令详解.txt [root@localhost example]# find . -size -50c -type f #查找小于50字节的普通文件 ./subexample1/example1.conf ./example2.conf ./subexample2/example1.conf
6.prune与path参数 [root@localhost example]# find . -path ./subexample1 -prune -o print #查找不在./subexample1目录下的文件或目录 . ./find命令详解.txt ./example1.conf ./example2.conf ./subexample2 ./subexample2/example1.conf # -o表示||(或) -a表示&&(与) [root@localhost example]# find . -path ./subexample1 -o -name "example2*" -prune -o print #查找不在./subexample1目录下或者不以example2开头的文件或目录 . ./find命令详解.txt ./example1.conf ./subexample1/example1.conf ./subexample2 ./subexample2/example1.conf [root@localhost example]# find . /( -path ./subexample1 -o -path ./subexample2 /) -prune -o -print . ./find命令详解.txt ./example1.conf ./example2.conf
7.mtime参数 [root@localhost example]# find . -mtime +1 -type d #查找1天前修改的文件,n天改写为n即可 [root@localhost example]# find . -mtime -1 -type d #查找1天内修改的文件 . ./subexample1 ./subexample2 # -mmin n查找系统中最后N分钟被改变文件数据的文件 # -amin n查找系统中最后N分钟访问的文件 # -cmin n查找系统中最后N分钟被改变文件状态的文件 ##### # -mtime n查找系统中最后N天被改变文件数据的文件 # -atime n查找系统中最后N天被访问的文件 # -ctime n查找系统中最后N天被改变文件状态的文件
8.ok与exec参数 [root@localhost example]# find . -type f -size 0 -ok rm {} /; #查找大小为0的普通文件并删除它 #格式:-ok参数后写shell命令,注意{}与/;之间有一个空格 < rm ... ./subexample1/example1.conf > ? n < rm ... ./example2.conf > ? n < rm ... ./subexample2/example1.conf > ? n [root@localhost example]# find . -name "example1*" -ok grep "Fed" {} /; #查找以example1开头的文件,然后用grep命令看看这些文件中是否有”Fed”字符,并且给出提示(删除文件时有用) < grep ... ./example1.conf > ? y Fedora < grep ... ./subexample1/example1.conf > ? y < grep ... ./subexample2/example1.conf > ? y [root@localhost example]# find . -name "example1*" -exec grep "Fed" {} /; #同上,但是不给出提示,直接执行,删除文件时小心 Fedora
9.xargs命令 [root@localhost example]# find . -name "example1*" | xargs grep "Fed" ./example1.conf: Fedora [root@localhost example]# find . -name "example1*"|xargs echo "" > 1.log #查找文件,并将查找结果写入日志文件中 [root@localhost example]# cat 1.log ./example1.conf ./subexample1/example1.conf ./subexample2/example1.conf (xargs命令同exec参数,建议使用该命令,因为它是分批执行,而exec是将find 查找到的所有结果一次执行,结果过大会出现错误) |