Linux find命令用来在指定目录下查找文件。
使用格式
find [指定查找目录] [查找规则] [查找完后执行的action]
举例
- 指定查找目录
[root@VM-Sonar-104 ssh]# find /etc/ssh /usr/local/sonarqube/bin/linux-x86-64/
/etc/ssh
/etc/ssh/ssh_config
/etc/ssh/ssh_host_key
/etc/ssh/sshd_config
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/moduli
/etc/ssh/ssh_host_rsa_key
/usr/local/sonarqube/bin/linux-x86-64/
/usr/local/sonarqube/bin/linux-x86-64/sonar.sh
/usr/local/sonarqube/bin/linux-x86-64/SonarQube.pid
/usr/local/sonarqube/bin/linux-x86-64/wrapper
/usr/local/sonarqube/bin/linux-x86-64/lib
/usr/local/sonarqube/bin/linux-x86-64/lib/libwrapper.so
这里要注意的是目录之间要用空格分开
- 指定查找规则
a.根据文件名查找,精确查找
[root@VM-Sonar-104 ssh]# find /etc/ssh -name ssh_config
/etc/ssh/ssh_config
b.根据文件名查找,但不区分大小写
[root@VM-Sonar-104 ssh]# find /etc/ssh -iname ssh_config
/etc/ssh/ssh_config
c.根据文件所属用户和所属组来查找文件
[root@VM-Sonar-104 ssh]# find /etc/ssh -user root
/etc/ssh
/etc/ssh/ssh_config
/etc/ssh/ssh_host_key
/etc/ssh/sshd_config
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/moduli
/etc/ssh/ssh_host_rsa_key
d.根据文件时间戳的相关属性来查找文件
我们可以使用stat命令来查看一个文件的时间信息如下:
[root@VM-Sonar-104 ssh]# stat /etc/ssh
File: `/etc/ssh'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 803h/2051d Inode: 12059408 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-08-21 15:00:04.353831471 +0800
Modify: 2017-12-01 14:19:49.535425401 +0800
Change: 2017-12-01 14:19:49.535425401 +0800
查找五天内没有访问过的文件
[root@VM-Sonar-104 ssh]# find ./ -atime +5
查找五天内访问过的文件
[root@VM-Sonar-104 ssh]# find ./ -atime -5
时间戳:
e.根据文件类型来查找文件,加参数-type
[root@VM-Sonar-104 ssh]# find /usr/test -type d
[root@VM-Sonar-104 ssh]# find /usr/test -d
//f 普通文件
//d 目录文件
//l 链接文件
//b 块设备文件
//c 字符设备文件
//p 管道文件
//s socket文件
f.根据大小来查找文件-size
[root@VM-Sonar-104 ssh]#find /tmp -size 2M //查找在/tmp目录下等于2M的文件
g.根据文件权限查找文件-perm
[root@VM-Sonar-104 ssh]#find /tmp -perm 755 //查找在/tmp目录下权限是755的文件
- 查找完执行的action
[root@VM-Sonar-104 ssh]# find ./ -atime -5 -print //-print默认情况下的动作
[root@VM-Sonar-104 ssh]# find ./ -atime -5 -ls //-ls查找到后用ls显示出来
删除5天之前的文件和目录,执行命令时先询问
[root@VM-Sonar-104 ssh]# find /Users/test -mtime +5 -name "*" -ok rm -rf {} \;//-ok [commend]查找后执行命令的时候询问用户是否要执行
删除5天之前的文件和目录,执行命令时不用询问
[root@VM-Sonar-104 ssh]# find /Users/test -mtime +5 -name "*" -exec rm -rf {} \; //-exec查找后执行命令的时候不询问用户直接执行
注:用{}来替代查找到的文件,;表示使用-exec的结束符,是固定格式。
实践
我们在用jenkins做持续集成时,要删除checkout 的.svn文件时,就可以用find命令来处理。具体命令如下:
find ${WORKSPACE} -type d -name ".svn"|xargs rm -rf
注:xargs可以把从 stdin 接受到的输入,用空白符分隔开,然后依次作为参数去调用xargs后面的命令。