有时候需要知道文件保存在哪个路径下,或者某个字符串在哪个文件中,这时就需要find命令以及find结合管道过滤的技术实现精确查找
1. 基于文件名的查找
-name指定的是文件的名字,可以是精确地名字也可以是正则表达式的Pattern
查找当前目录下,名字为file_1的文件
find . -name "file_1"
查找当前目录,名字为file_开头的文件或者目录
find . -name "file_*"
在当前目录下,名字为file_1,并且忽略大小写的文件或者目录,iname表示名字忽略大小写
find . -iname "file_1"
2. 基于文件的大小查找,+表示大于多少size,-表示小于多少,什么都不加表示等于
find PATH -size +5M
find PATH -size 5M
find PATH -size -5M
3. 基于文件类型的查找,文件类型分为文件f,目录d,链接l,块b等
find PATH -type f -name "xxx"
4.基于文件日期查找,也是用+,-表示大于的和小于的日期
find PATH -mtime +7
find PATH -mtime 7
find PATH -mtime -7
5.基于用户和组查找
find PATH -type f -name "xxx" -user root -group root
6.基于权限的查找
精确查找,查找文件权限是644的,并且以长格式显示
find PATH -type f -perm 644
包含查找,查找文件权限包含的关系,找出权限包含600的文件
find PATH -type f -perm -600
动作处理:
查找到文件后需要对这些文件进行处理,则可能用到的处理有打印,长格式显示,删除,执行
-print是默认的动作,-ls是长格式显示,-delete是删除,-exec是执行动作
一般来说,执行exec的效率不如xargs,因为是遍历的执行,而xargs是一次性作为参数执行
find PATH -type f -name "xxx" -exec rm -rf {} \;
一般来说需要结合xargs来使用处理
find PATH -type f -name "xxx" | xargs rm -rf
find结合grep的使用,常用于定位文件的内容
grep后面的参数,n表示打印行号,R表示递归查找,i表示忽略大小写的查找
find PATH -type f | xargs grep -nRi "xxx"