标签:find命令
1、locate文件查找命令:
locate:根据文件名查找文件
非实时查找、模糊匹配、速度快,但是依赖于事先构建好的索引库,索引库可以通过系统自动实现(周期性任务),也可以通过命令手动实现,手动更新数据库(updatedb)
模糊匹配体现在不只匹配路径中的基名,也匹配路径中的内容;
注意:locate构建索引库需要遍历整个根文件系统,极消耗资源。
locate命令格式:
locate [OPTION]... PATTERN...
[OPTION]
-b:只匹配路径中的基名;
-c:统计有多少文件满足查找要求
-r:基于正则表达式匹配查找内容
2、find文件查找命令:
find:在指定的目录中查找文件
实时查找工具,精确查找、速度慢,通过遍历指定起始路径下的文件系统层级结构,完成文件查找。
find命令格式:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
或:find [option...] [查找起始路径] [查找条件] [处理动作]
注意:查找起始路径要在查找条件之前,否则会报语法错误。
查找起始路径:指定具体搜索目标起始路径,不跟路径,默认为当前目录路径
查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等标准进行查找,不跟查找条件默认为找出指定路径下的所有文件。
处理动作:对符合查找条件的文件做出的操作,例如删除,默认为输出至标准输出;
2.1、查找条件:也叫表达式,它有选项和测试实现;测试结果通常为布尔型(true,false) |
根据文件名查找: -name PATTERN:根据文件名查找; -iname PATTERN:根据文件查找,忽略大小写; 注意:此处的PATTERN,支持glob风格的通配符(*,?,[ ], [^ ]) 如:#find /etc/ -name "passwd" -regex pattern :基于正则表达式模式查找文件,匹配整个路径,而非其名 |
根据文件从属关系查找: -user USERNAME:根据文件属主查找,查找属主为指定用户的所有文件 -group GROUPNAME:根据文件属组查找,查找属组为指定组的所有文件 -uid UID :根据文件uid查找,查找属主为指定UID的所有文件 -gid GID:根据文件gid查找,查找属组为指定GID的所有文件 -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件。 如:#find /etc/ -user root |
根据文件类型查找: -type TYPE:根据文件的类型查找 f:普通文件 d:目录文件 l:符号链接文件 b:块设备文件 c:字符设备文件 p:管道文件 s:套接字文件 如:find /etc -type f |
根据组合测试查找: -a:与,同时满足各个条件;两个选项之间不加-a,默认为-a操作 -o:或,满足条件中的任意一个即可; -not:非,用!表示也可 如: #find /tmp -nouser -a -type f -ls #find /tmp -not -type f -ls |
根据文件大小查找: -size [+|-]#unit :unit为单位,常用的为:K,M,G,默认为字节 #unit:(#-1,#] +#unit:(#,+∞) -#unit:[0,#-1] |
根据文件时间戳查找 以天为单位: -atime [+|-]# :#代表以天数为单位 -mtime [+|-]# :#代表以天数为单位 -ctime [+|-]# :#代表以天数为单位 以分钟为单位: -amin [+|-]# :#代表以分钟为单位 -mmin [+|-]# :#代表以分钟为单位 -cmin [+|-]# :#代表以分钟为单位 +代表以外(-∞,-#-1]; -代表以内(-#,0); 没有+-代表那一刻时间(-#-1,-#] |
根据文件权限查找 -perm [/|-] MODE mode:精确匹配权限 /mode:任何一类用户(u、g、o)的权限中的任何一位(r、w、x)符合条件即满足;9位权限位之间存在“或”关系 -mode:任何一类用户(u、g、o)的权限中的每一位(r、w、x)同时符合条件即满足; 如: #find /tmp -perm /222 ls //表示查找tmp目录下文件的ugo三类用户任一用户具有“写”权限的文件; #find /tmp -perm -002 -ls //表示查找其他用户具有写权限的文件,0表示不关心权限设置 #find /tmp -perm -222 -ls //表示查找三类用户同时具有写权限的文件 #find /tmp -not -perm -222 -ls //表示查找至少有一类用户没有写权限的文件; |
练习1:找出/tmp目录下为非root且文件名包括fstab字符串的文件
[root@localhost test]# find ./ -not -user root -a -name "*fstab*"
练习2:找出/tmp目录下文件名不包括fstab字符串的文件
[root@localhost test]# find ./ -not -name "*fstab*"
2.2、 处理动作
-print:输出至标准输出,默认动作
-ls: 类似对查找到的文件执行 “ls -l”命令,输出文件的详细信息;
-delete: 删除查找到的文件;
-fls /PATH/TO/FILE :保存输出的详细信息至指定的文件中;
-ok COMMAND {} \; :对查找到的每个文件执行由“COMMAND”表示的命令,每次操作有用户确认;其中{ }表示前面查找文件的占位符, 而\;为固定格式;
-exec COMMAND {} \; :对查找到的每个文件执行由“COMMAND”表示的命令,每次操作不需要用户确认;其中{ }表示前面查找文件的占位符,而 \;为固定格式;
如:
[root@localhost test]# find ./ -not -name "*fstab*" -fls /tmp/aaa
[root@localhost test]# find ./ -not -name "*fstab*" -ok chown user:user {} \;
[root@localhost test]# find ./ -name "*fstab*" -exec chown basher: {} \;
[root@localhost test]# find ./ -perm -004 -exec mv {} {}.dan \; //表示查找其他用户有读权限的文件,并对查找到的每个文件执行mv操作,即重命名每个文件在其后加上.dan
注意:find传递查找到的文件路劲至后面的命令时,是先找出所有符合条件的文件路径,并一次性传递给后面的命令,但是有些命令不能接受过长的参数,此时命令会执行失败,可以有另一种方式来规避,如下:
find | xargs command
标签:find命令
原文地址:http://10631377.blog.51cto.com/10621377/1977094