强大的 find 命令在 linux 中是用来在指定目录下查找文件的, 对于 find 命令来说任何位于参数之前的字符串都将被视为将要被查找的目录名, 而如果使用该命令时, 不设置任何参数, 则 find 命令将默认在当前目录下查找子目录与文件, 并且将查找到的子目录和文件全部进行显示.
一, find 命令格式 (即语法)
1,find 命令的一般形式为:
# find 查找路径名 -options [-print -exec -ok ...]
* 查找路径名: 指定具体的目标路径, 默认为当前目录.
*options(查找条件): 指定的查找标准, 可以为文件名, 大小, 类型, 权限等标准, 默认为找出指定路径下的文件
* 处理动作: 对符合的文件做操作, 默认打印输出至屏幕.
2,find 命令的参数:
- # pathname: 在 find 命令所查找的目录路径中, 可以用. 来表示当前目录, 用 / 来表示系统根目录.
- # -exec: find 命令对匹配的文件执行该参数所给出的 shell 命令时, 相应命令的形式为 "command { } \;", 这里要注意 "{ }" 和 "\;" 之间的空格.
- # -ok: 和 - exec 的作用相同, 只不过以一种更为安全的模式来执行该参数所给出的 shell 命令, 在执行每一个命令之前, 都会给出提示, 让用户来确定是否执行.
二, find 命令工作特点
1, 优点:
- #实时查找
- #精确查找, 搜索整个目录下所有文件
- #可以对查询到的文件惊喜指定动作, 即查看, 删除, 移动等等.
2, 缺点:
#查找速度太慢
三, find 命令的使用
我们可以把查询条件想象的分为两类, 即选项和测试条件
1,find 命令选项
#指定目录的查找范围
* -mindepth N 最小搜索深度
* -maxdepth N 最大搜索深
* -mindepth N -maxdepth N 只搜索指定深度
#查找空文件
* -empty 查询内容为空的文件
#排除符号连接
* -follow 排除符号连接
2, find 命令测试条件
#根据文件名进行查找
* -name "文件名" 以文件名进行查找, 支持使用 glob
* -iname "文件名" 按文件名不区分大小写查找, 只支持 glob 风格的查找方式:*,[],[^],?
* -regex "文件名" 基于正则表达式查找文件, 正则部分要用引号引起来, 同时要表示文件的完整路径, 搜索当前目录时, 用./, 搜索指定目录时如 / app, 则用 / app/....
* -inum inode 号 以 inode 号为查找条件
* -samefile name 找出与 name inode 相同的文件
* -links n 找到硬链接数为 n 的文件
#根据文件从属关系进行查找
* -user 用户名: 查找属主为指定用户 (UID) 的文件
* -group 组名 : 查找属组为指定组 (GID) 的文件
* -uidUserID: 查找属主为指定的 UID 号的文件
* -gidGroupID: 查找属组为指定的 GID 号的文件
* -nouser: 查找没有属主的文件
* -nogroup: 查找没有属组的文件
#根据文件类型进行查找 -type "类型"
* f: 普通文件
* d: 目录文件
* l: 符号链接文件
* s: 套接字文件
* b: 块设备文件
* c: 字符设备文件
* p: 管道文件
- #根据文件大小进行查找
- * -size [+|-]#UNIT 常用单位: k, M, G,c(byte) 注释: #UNIT: (#-1, #] , 如 6k 表示(5k,6k];+#UNIT :(#,) , 如 + 6k 表示(6k,);-#UNIT:[0,#-1] , 如 - 6k 表示[0,5k].
- #根据时间进行查找
* -atime[+|-]time/-amin[+|-]time 以访问时间 (天 / 分钟) 查找
* -mtime[+|-]time/-mmin[+|-]time 以数据修改时间 (天 / 分钟) 查找
* -ctime[+|-]time/-cmin[+|-]time 以元数据修改时间 (天 / 分钟) 查找
#根据文件权限进行查找
* -perm MODE 精确权限匹配
* -perm /MODE : 任何一类 (u,g,o) 对象的权限中只要能一位匹配即可, 相互之间表示或的关系,"+" 等同于 "/", 但 "+" 从 centos7 开始淘汰
* -perm -MODE : 每一类对象都必须同时拥有指定权限, 相互之间表示与的关系
#组合条件测试
* 内容包含 与:-a 或:-o 非: -not
* 德 摩根定律:
非 (A 且 B)=(非 A) 或(非 B); 非 (A 或 B)=(非 A)且(非 B)
3, 处理动作
- # -print (默认) 查找的结果打印到终端
- # -ls 查找的结果显示详细信息, 以长文件的格式输出
- # -delete 将查找的结果删除, 不交互
- # -ok shell command {} \; 查找到的文件传递给 COMMAND 命令, 提每步都给用户提示确认操作(交互执行 shell 命令)
- # -exec shell command {} \; 查找到的文件传递给 COMMAND 命令, 直接修改完成, 不给用户确认(非交互执行 shell 命令)
- # 注意: find 将查找到的文件路径一次性传递给后面的命令, 但有很多命令不能接受过长的参数, 从而将会导致命令执行失败, 所以有时我们需要借助 xargs 命令, 来帮助我们进行参数的传递, 例如 :
- [root@centos6 ~]# find /etc -type f | xargs -i {} cp/app/tmp -i 参数是由 find 命令的结果传给 xargs 命令的, 并且由 - i 指定结果代替符 {}.
二,
来源: http://www.bubuko.com/infodetail-2704322.html