1、命令格式:
find pathname -options [-print -exec ...]
2、命令参数:
pathname : 查找的目录路径。例如:./表示当前目录,/表示系统根目录。
-print :将匹配的文件输出到标准输出。
-exec :对前边匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command‘ { } \;,注意{ }和\;之间的空格。
3、命令选项(options):
-name :安装文件名查找文件
-perm :安装文件权限查找文件
-prune :该选项使find命令不在当前指定的目录中查找,如果同时使用-depth 选项,则-prune选项被find命令忽略。
- user :按照文件属性查找文件
-group :安装文件所属组查找文件
-mtime -n +n :按照文件更改的时间查找文件,-n表示文件更改时间据现在n天以内,+n表示文件更改时间据现在n天以前,atime 类似
-nogroup :查找无效所属组的文件即该文件属组在/etc/group中不存在。
-nouser :查找无效属主的文件,即该文件属主在/etc/passwd中不存在。
-newer file1 !file2 :查找更改时间比文件file1新但比file2旧的文件。
-type :查找某一类型的文件,如下:
b //块设备文件 (一块儿等于512字节)
d //目录
c //字符设备文件
p //管道文件
l //符号链接文件
f //普通文件
-follow :如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
find常用实例:
find ~ -name "*.log" -print //查找家目录及其子目录中的文件
find . -name "*.log" -print
find . -name "[A-Z]*" -print
find /etc -name "host*" -print
find ~ -name "*" -print 或find . -print //查找家目录下的文件
find . -name "[a-z]*[4-9].log"-print //想在当前目录查找文件名以一个个小写字母开头,最后是4到9加上.log结束的文件
# find . -perm 755 -print //当前目录下查找文件权限位为755的文件
# find test -path "test/test3"-prune -o -print //希望在test目录下查找文件,但不希望在test/test3目录下查找
find . -size +1000000c -print //在当前目录下查找文件长度大于1 M字节的文件
# find . -size +1000c -print //查找当前目录大于1k的文件
find /home/apache -size 100c -print //在/home/apache目录下查找文件长度恰好为100字节的文件
find . -size +10 -print //在当前目录下查找长度超过10块的文件(一块等于512字节)
使用type选项:
实例1:在/etc目录下查找所有的目录
命令:
find /etc -type d -print
实例2:在当前目录下查找除目录以外的所有类型的文件
命令:
find . ! -type d -print
实例3:在/etc目录下查找所有的符号链接文件
命令:
find /etc -type l -print
# find -atime -2 //查找2天内修改过的文件
# find . -name "*.log" //在当前目录下查找.log结尾的文件
# find . -type f -name"*.log" //查找当前目录以.log结尾的普通文件
# find . -type d | sort //查找当前所有目录并排序
#
*************-exec 可是使用xargs来代替比较方便书写和操作。************************
# find . -type f -exec ls -l {} \; //查找当前目录下的普通文件后使用ls -l查看
对前边处理的结果再处理
可更改为:#find .=type -f|xargs ls -l //利用管道把前边执行后的数据再处理。
# find . -type f -mtime +14 -exec rm {}\; //在当前目录中查找更改时间距现在14天以前的普通文件后删除
可更改为:#find .-ytpe f -mtime +14 |xargs rm
# find . -name "*.log" -mtime +5-ok rm {} \; //在当前目录下查找更改时间距现在5天之前的文件并删除他们,在删除之前先给出确认提示。
#
[[email protected] ~]# find /etc -name"passwd" |xargs grep "root"
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]#
# find . -name "*.log" -exec mv{} .. \; //查找文件移动到指定目录#这条命令是将查到的文件移动到上一级目录下。
# find . -name "*.log" -exec cp{} test3 \; //查找当前目录下以*.log结尾的文件cp到test3目录下。
可更改为:#find .-name "*.log" |xargs cp test3
# find . -name "file" | xargs -I[] cp [] .. //等同上一个
#
#
注:总之:xargs和exec的执行效果一样的,xargs的执行效率比exec要高很多!
# find . -type f -print | xargs file //查找当前目录下普通文件后查下文件的属性。
# find / -name "core" -print |xargs echo "" >/tmp/core.log //在根目录下查找内存信息后标准输出的内容转存到cort.log文件中。
# find . -perm -7 -print | xargs chmodo-w //查找当前目录下所有用户具有读、写和执行权限的文件,并收回写的权限。
# find . -type f -print | xargs grep"hostname" //查找当前目录下的普通文件中包括hostname这个词。
# find . -name \* -type f -print | xargsgrep "hostnames" //同上
# find . -name "*.log" | xargs -imv {} test4 //查找当前目录下包括.log的文件后移动到test4目录下。
# find . -name "*.log" | xargs -p -i mv {} .. //-p 是在移动时提示确认是否执行后边的命令。