find
linux中find命令详解。对于使用各种条件来查找文件,该命令非常的重要,而且还能使用-exec参数,附加命令,(跟xargs很像),完成更多的功能。
类似于资源管理器中的查找功能。
资源
正文
通用说明
数字,+号代表 大于,-号代表小于。如:
find -mtime -10,表示查找修改在10天以内的文件。具体的数字,代表的是那1天。
atime: 显示上一次读取或访问文件的时间。amin: 显示上一次读取或访问文件是多少分钟之前mtime: 显示文件或程序上一次修改文件的时间。更改或修改文件内容时,mtime也会更改。“修改”是指将某些数据附加到文件中,部分或全部重新组织或删除。mmin: 显示几分钟内最后一次修改文件的时间。ctime: 显示文件属性何时修改的
exec
find . -name "*.sh" -exec cat {} \;
find . -name "*.txt" -exec echo {} {} \; # 出现两次也是可以的。
说明:
-exec参数后面跟的是command命令,它是以 ; 为结束标志,由于各个系统中分号会有不同的意义,因此在前面加上反斜杠。{} 代表前面find查找出来的文件名
关于分号的说明:避免其成为find的结束标志,其只是 -exec 的内容一部分,即结束标志,而且是不可或缺的。
# 查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称)
find ./ -type d -print -exec ls {} \;
type
文件类型
# 查找文件
find ./ -type f
#查找目录
find ./ -type d
name
文件名称,可以使用*,?符号。i大小写忽略。
# 当前目录下,txt格式,大小写忽略
find . -type f -iname "*.txt"
emptys
#查找空文件或空目录
find ./ -empty
#查找空文件并删除
find ./ -empty -type f -print -delete
atime
访问时间。
mtime
查找24小时内修改过的文件。
find -type f -mtime -1
#查找文件更新日时在距现在时刻二天以内的文件
find ./ -mtime -2
#查找文件更新日时在距现在时刻二天以上的文件
find ./ -mtime +2
# 查找文件更新日时在距现在时刻一天以上二天以内的文件
find ./ -mtime 2
mmin
修改,以分钟为单位。 m即modify。
#查找文件更新日时在距现在时刻二分以内的文件
find ./ -mmin -2
#查找文件更新日时在距现在时刻二分以上的文件
find ./ -mmin +2
#查找文件更新日时在距现在时刻一分以上二分以内的文件
find ./ -mmin 2
depth
depth深度优先选项。 意思是:在处理目录以前首先处理目录下的子内容。
也即是说在不加-depth的时候, 处理顺序是首先处理目录本身,然后处理目录下的子内容。加不加-depth参数,会影响输出结构的输出顺序。
maxdepth最大深度。
mindepth最小深度。
find . -maxdepth 1 -mtime -10
regex
#查找名字符合正则表达式的文件,注意前面的‘.*’(查找到的文件带有目录)
find ./ -regex .*so.*\.gz
newer
比某个文件更新。居然没有older选项。
#查找文件更新时间比文件abc的内容更新时间新的文件
find ./ -newer abc
#查找文件访问时间比文件abc的内容更新时间新的文件
find ./ -anewer abc
perm
查找权限
#查找权限为644的文件或目录(需完全符合)
find ./ -perm 664
#查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
find ./ -perm -664
#查找用户有写权限或者组用户有写权限的文件或目录
find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w
#查找所有者权限有读权限的目录或文件
find ./ -perm -u=r
#查找用户组权限有读权限的目录或文件
find ./ -perm -g=r
#查找其它用户权限有读权限的目录或文件
find ./ -perm -o=r
group/user
查找所有者为lzj的文件或目录
find ./ -user lzj
查找组名为gname的文件或目录
find ./ -group gname
查找文件的用户ID不存在的文件
find ./ -nouser
查找文件的组ID不存在的文件
find ./ -nogroup
size
查找文件size小于10个字节的文件或目录
find ./ -size -10c
查找文件size等于10个字节的文件或目录
find ./ -size 10c
查找文件size大于10个字节的文件或目录
find ./ -size +10c
查找文件size小于10k的文件或目录
find ./ -size -10k
查找文件size小于10M的文件或目录
find ./ -size -10M
查找文件size小于10G的文件或目录
find ./ -size -10G
ok
执行命令前需要确认,类似于exec。
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
find ./ -type d -ok ls {} \;
daystart
daystart 选项测量从当天开始而不是24小时之前开始的时间。
例如,要查找昨天编辑的所有pdf文件,请运行:
[root@localhost ~]# find /root/data/ -mtime 1 -daystart -iname "*.pdf"
要列出3-5天之前编辑的文件,请运行以下命令:
[root@localhost ~]# find /home/james/data/ -mtime 3 -mtime -5 -daystart -iname "*.pdf"
应用
查找有执行权限但没有可读权限
#查找有执行权限但没有可读权限的文件
find ./ -executable \! -readable
删除空文件
find */ -type f -empty -delete
镜像搜索
公司用在registry的搜索方案。
find -type d -name current |grep current |grep tags > images.list
#cat /root/yunda_deployments/dev_image_list/sed_delete_useless_tag.sh
sed 's|./docker/registry/v2/repositories/||g' -i images.list
sed 's|_manifests/tags/||g' -i images.list
sed 's|/current/link||g' -i images.list
sed 's|/current||g' -i images.list
sed '/\d-\d/d' -i images.list
# 将最后出现的 / 再变分号