shell命令:find查找命令

一般用法:

find 目录 参数  #按要求列出指定目录及其子目录下的所有文件和目录,指定目录要在参数之前

限定查找文件类型:

find . -type d  #只列出目录
find . -type f  #只列出目录

限定查找目录的深度,仅查找当前目录而不查找子目录深度用1:

find . -maxdepth 1  #只查找当前目录
find . -mindepth 2  #只查找子目录

根据文件名(或目录名)查找:

find . -name "*.txt"  #查找所有名称为*.txt的文件或目录
find . -iname "*.pdf" #忽略大小写查找所有名称为*.txt的文件或目录
find . \( -name "*.txt" -o -name "*.pdf" \)  #OR条件,匹配多个条件中的一个。注意括号用法,注意空格:\( 和 \)。

根据路径名和文件名(或目录名)查找:

find /root -path "/root/t/*.txt"
find /root -ipath "/Root/t/*.txt"  #忽略大小写

基于正则表达式的路径名和文件名(或目录名)查找:

find /root -regex "/Root/t/.*scala"
find /root -iregex "/Root/t/.*s$"  #忽略大小写

否定参数!:

find . ! -name "*.txt"  #查找所有名称不为*.txt的文件或目录

根据文件时间来查找(最后访问时间-atime,最后修改时间-mtime,文件元数据(例如权限或所有权)最后变化时间-ctime),+表示大于,-表示小于,单位为天:

find . -type f -atime -7  #列出最近7天访问过的文件
find . -type f -atime 7   #列出恰好7天前访问过的文件
find . -type f -atime +7  #列出访问时间超过7天的文件
#以下是基于分钟的参数-amin,-mmin,-cmin
find . -type f -amin +3   #列出访问时间超过3分钟的文件

时间比较参数-newer:

find . type f -newer this.txt  #列出比this.txt更新的(更长的修改时间)所有文件

基于文件大小查找-size:

find . -type f -size +2k  #列出大于2KB的文件
find . -type f -size -2M  #列出小于2MB的文件
find . -type f -size 2G   #列出2GB的文件
find . -type f -size +2c  #列出大于2B的文件
##若计数值是1的时候不准确(如1k),所以转换单位(比如转为1024c)

-delete选项,删除查找到的所有文件:

find . -type f -name "*.txt" -delete  #删除所有txt文件

-exec选项,利用find的结果执行其他命令:

find . -type f -name "*.txt" -exec cat {} \; > /root/all.txt  #将所有txt文件合并到all.txt里,注意输出文件最好不要是被查找到的文件之一
find . -type f -name "*.txt" -exec ls -hl {} \;  #用ls列出所有查到的文件的信息

列出当前目录下所有文件(和目录),不包括abc目录下的(和abc目录本身):

find . \( -name "abc" -prune \) -o \( -print \)
posted @ 2018-12-17 09:03  xuejianbest  阅读(1739)  评论(0编辑  收藏  举报