Linux find命令
文件查找
locate:非实时查找,基于数据库(索引)查找,模糊查找,但速度快;
需要事先构建索引(数据库),一般是定期(周期性任务)的在系统空闲时自动构建索引;索引构建过程需要遍历整个根文件系统,极其耗费资源;
find:实时查找,精确查找,速度慢;
通过遍历指定路径下的所有文件来进行查找;
find [options] … [文件路径] [查找条件] [处理动作]
文件路径:指定具体目标路径,默认为当前目录;
查找条件:指定的查找标准,可以是文件名、文件大小、文件权限等,默认为指定路径下的所有文件;
处理动作:对符合条件的文件做什么动作,默认为输出到屏幕上;
查找条件:
根据文件名查找
-name "filename" :支持使用glob;
-iname:查找时不区分大小写;
-regex "pattern":支持按正则表达式匹配,根据模式匹配整个文件路径字符串,而不仅仅是文件名;
根据属主,属组查找
-user:根据用户名查找;
-group:根据组名查找;
-uid:根据uid查找;
-gid:根据gid查找;
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
根据文件类型查找
-type:指定类型查找;
f:文件类型
d:目录类型
l:链接
p:管道
c:字符设备类型
b:块设备类型
组合条件查找:可能会用到摩根定律;
-a:并且;
-o:或者;
-not:非;
如果使用括号的话,需要转义字符转义;
根据文件大小查找
-size [+|-]:(n-1,n] 按照大小查找;常用单位有K、M、G;
+:(n,∞)
-:[0,n-1]
根据时间戳查找
以天为单位查找:
-atime [+|-]:[n,n+1]访问时间
+:(n+1,∞)
-:[0,n)
-ctime:改变时间;
-mtime:修改时间;
以分钟为单位:
-amin[+|-]:用法同上;
-cmin:
-mmin:
根据权限查找
-perm[+|/|-] MODE:
/:任何一类对象(user,group,other)只要有一类的任何一个权限位能匹配上就符合;
-:三类对象都要匹配并且权限位也要全部匹配,只可多不能少;
处理动作
-print:默认的处理动作,显示至屏幕;
-ok COMMAND {} \; :对查找到的文件执行由COMMAND命令指定的动作;交互式的;
-exec COMMAND {} \; :对查找到的文件执行由COMMAND命令指定的动作;非交互式;
Note:find传递查找到的文件给后面指定的命令时,会将查找到的符合条件的文件一次性的全部传递给后面的命令;有些命令不能接受过多的参数,会导致命令执行失败;可以使用find | xargs command 处理,但是并不是所有命令(command)都支持xargs;xargs一次只接受一条信息处理;
find /path/to/somewhrer -user root -exec mv {} {}.new \; 可实现改名操作;
{}:表示每一个被find查找到的符合条件的文件;
-delete:删除查找到的文件;
-fls /path/to/somefile :将查找到的文件按照长格式保存至指定文件中;
-ls:类似于对查找到的文件做ls -l操作;
注:根据马哥视频做的笔记,如有错误,欢迎指正;侵删