Linux常用命令——find

本文介绍find命令。

作用

用于查找文件

语法

find [查找路径] 寻找条件 操作

参数

-name          匹配名称
-perm          匹配权限(mode为完全匹配,-mode为包含即可)
-user          匹配所有者
-group         匹配所有组
-mtime -n +n    匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n    匹配访问文件的时间(-n指n天以内,+n指n天以前
-ctime -n +n    匹配修改权限的时间(-n指n天以内,+n指n天以前
-nouser        匹配无所有者的文件
-nogroup        匹配无所有组的文件
-newer f1 !f2    匹配比文件f1新却比f2旧的文件
--type b/d/c/p/l/f 匹配文件类型(块设备、目录、字符设备、管道、链接文件、文件文件)
-size           匹配文件的大小(+50k查找超过50k的文件,而-50k则代表查找小于50k的文件)
-prune          忽略某个目录
-exec {} \;      后面可接对搜索到结果进一步处理的命令
!取反
-a并且 and
-o或者 or
&&并且 and

实例

获取/etc/中所有以host开头的文件

find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname

在整个系统中搜索所有权限中包括SUID权限的文件

find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分输出信息………………

"-exec {} \;"其中的{}代表find命令搜索出的逐个文件,并且记得命令的结尾必须是\;

find / -user oliver -exec cp -a {} /root/findresults/ \;

删除一个目录下的所有文件,但保留一个指定文件

#假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件
[root@oldboy xx]# touch file{1..10}
[root@oldboy xx]# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
[root@oldboy xx]# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
#方法一,通过xargs传参
[root@oldboy xx]# find /xx -type f ! -name "file10"|xargs rm -f 
[root@oldboy xx]# ls
file10
#方法二,通过find的-exec执行命令参数
 [root@oldboy xx]# find /xx -type f ! -name "file10" -exec rm -f {} \;     
[root@oldboy xx]# ls
file10

标签: none