Linux find命令详解

1 find
命令说明: 查找符合条件的文件,并执行指定的操作

命令格式: find [指定目录] [查找规则] [指定操作]
 
1.1 指定目录
[dir1 dir2]# 可以指定多个目录
1.2 查找规则
[-name] # 根据文件名查找 (区分大小写|支持通配符)
[-iname] # 根据文件名查找 (不区分大小写|支持通配符)
[-user] # 根据所属用户查找
[-group] # 根据所属用户组查找
[-nouser] # 查找无所属用户的文件
[-nogroup] # 查找无所属用户组的文件
[-uid] # 根据用户ID查找
[-gid] # 根据组ID查找
[-a] # AND 连接两个条件
[-o] # OR 连接两个条件
[-not] # NOT 对条件取反
[-atime -n/+n] # 按文件访问时间 (n天以内 / n天以前)
[-ctime -n/+n] # 按文件创建时间 (n天以内 / n天以前)
[-mtime -n/+n] # 按文件修改时间 (n天以内 / n天以前)
[-type f/d/l/b/c/p/s] # 按文件类型 (普通文件/目录文件/链接文件/块设备文件/字符设备文件/管道文件/socket文件)
[-size 2M/+2M/-2M] # 按文件大小 (等于2M / 大于2M / 小于2M)
[-perm 755] # 按文件权限 (755权限)
1.3 指定操作
{} # 代表找到的文件
[-print] # 查找后打印结果 (默认操作)
[-ls] # 查找后把结果列表显示
[-ok] # 查找后询问用户是否执行命令
[-exec] # 查找后不询问直接执行命令
1.4 举例说明
要求:查找 (/data/ 和 /www/) 目录下的后缀名为 (.php 或 .sh) 且创建时间在 5天之内 的 普通文件 并 重命名。
# [命令1]
find /data/ /www/ -name "*.php" -o -name "*.sh" -ctime -5 -type f -exec mv {} {}.bak \;
说明:以上命令 [-exec] ,只会对满足 *.sh 规则的文件进行重命名操作,而忽略了 -o 条件查找出来的 *.php 文件,因此并不能满足要求,另外一定要注意命令结尾的空格和 \; 。
 
借助 xargs -i 命令满足了要求:
# [命令2]
find /data/ /www/ -name "*.php" -o -name "*.sh" -ctime -5 -type f | xargs -i mv {} {}.bak

0 个评论

要回复文章请先登录注册