在Linux 系统维护过程中Find 命令是使用非常频繁的命令之一;它的功能很强大,可以从不同的维度筛选我们要查找的文件。
一、文件名称
1、查找所有txt和pdf文件
find . \( -name "*.txt" -o -name "*.pdf" \) -print
2、正则方式查找.txt和pdf
find . -regex ".*\(\.txt|\.pdf\)$"
-iregex:忽略大小写的正则
3、否定参数 ,查找所有非txt文本
find . ! -name "*.txt" -print
二、设定搜索目录的深度
打印出当前目录的文件(即设置深度为1)
find . -maxdepth 1 -type f
三、搜索指定文件类型
使用type选项指定搜索的文件类型;常用的文件类型有:
f:文件
l:符号链接
d:目录
1、只列出所有目录
find . -type d -print/
Find搜索文件命令支持的文件检索类型可以区分普通文件和符号链接、目录等;无法区分普通文件中的二进制文件和文本文件。
2、如果想要查询二进制文件,需要和其他命令结合使用
ls -lrt | awk '{print $9}'|xargs file|grep ELF| awk '{print $1}'|tr -d ':'
四、指定文件时间搜索
其中涉及到文件时间类型有以下类型:
-atime访问时间 (单位是天,分钟单位则是-amin,以下类似)
-mtime修改时间 (内容被修改)
-ctime变化时间 (元数据或权限变化)
1、最近第7天被访问过的所有文件
find . -atime 7 -type f -print
2、查询7天前被访问过的所有文件
find . -atime +7 type f -print
五、指定大小搜索
使用size选项,指定我们要搜索的文件大小。可用的关键词有k M G。
1、寻找大于2k的文件
find . -type f -size +2k
六、按权限查找
1、找具有可执行权限的所有文件
find . -type f -perm 644 -print
七、按用户查找
找用户weber所拥有的文件
find . -type f -user weber -print
对查找结果进行处理
我们在使用Find 命令的时候,一般会对搜索到的结果文件进行一些处理。
一、删除文件
1、使用delete删除搜索结果
find . -type f -name "*.swp" -delete
二、结合xargs使用
find . type f -name "*.swp" | xargs rm
参考文档:https://cn-blogs.cn/archives/469.html
三、执行动作(强大的exec)
在使用exec命令处理搜索结果时,其中{}是一个特殊的字符串,对于每一个匹配的文件,{}会被替换成相应的文件名。
1、将当前目录下的所有权变更为weber:
find . -type f -user root -exec chown weber {} \;
2、将找到的文件全都copy到另一个目录:
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
3、如果需要后续执行多个命令,可以将多个命令写成一个脚本。然后-exec调用时执行脚本即可:
-exec ./commands.sh {} \;
快速查找命令locate
locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库:
$locate filename
更新文件索引信息:$updatedb