Linux find
跳到导航
跳到搜索
Linux find 命令用于在指定目录下查找文件和目录。
Format
find [路径] [匹配条件] [动作]
Path: 查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录
Expression: 可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
- 按文件名称查找: -name pattern (支持使用通配符 * 和 ?)
- 按文件类型查找: -type TYPE (TYPE = f(普通文件)、d(目录)、l(符号链接)等)
- 按文件大小查找: -size [+-]N[cwbkMG] (+/- 大于/小于,N 是一个整数c(字节)、w(字数)、b(块数)、k/M/G)
- 按修改时间查找: -mtime [+-]N (+/- 表示在指定天数前或后,N 是一个整数表示天数)(a=访问, c=状态变化, m=修改)
- 按访问时间查找: -amin n:查找在 n 分钟内被访问过的文件
动作: 可选参数,用于对匹配到的文件执行操作,比如删除、复制等
- 列出它们的完整路径: -exec ls -l {} \;
- 执行删除操作: -exec rm {} \; # 建议使用"|xargs rm -f;"
表达式关系运算:
- 默认关系间是逻辑与,如:-mtime +0 -mtime -3 表示 1 天以上,4 天以下
- -o 逻辑并,如:-type f -mtime 0 -o -mtime 2 表示 第 1 天内,第 3 天内(无第 2 天内,以及第二项并未指定文件,有可能出现目录)
第 1 天内表示 [0-24),第 3 天内表示 [48-72)
Sample
删除七天前文件
前两个有问题,就是加上 -name 之后,过滤出来的文件时间范围不对 # Err : find /u01/app/archivelog -mtime +7 -type f -name *.arc -exec rm -f {} \; # Err : find /u01/app/archivelog -mtime +7 -type f -name *.arc |xargs rm -f; --- find /u01/app/archivelog/ -mtime +7 -type f |xargs rm -f; ## !! 不要使用 cd $PATH,再 find . 方法,在 $PATH 不存在时会出问题
当前子目录增加执行权限
适用于 http 目录 List 中文件下载,无执行权限看不到目录等情况 chmod +x `find . -type d`
在多台机器中查找大文件
# m02:/data/ndb ./rrun ip_all "find / -type f -size +1G 2>/dev/null|grep '.zip'"