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 \)