linux shell中find的使用
一、工作方式沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
二、基本用法
(1)根据文件名或正则表达式匹配搜索
find搜索路径 -name "文件名" eg.
①在当前目录下搜索以.txt结尾的文件,默认使用‘\n’为定界符,分隔文件名(即一个结果一行)
find . -name "*.txt" ②在/opt目录下搜索以.pdf结尾的文件,使用-print指定‘\0’作为定界符,分隔文件名
find /opt -name "*.pdf" -print0 ③在上级目录下搜索文件名包含pdf,并且不区分大小 , -iname
find .. -iname "*pdf*" ④在当前目录下搜索以.txt或则.pdf的文件, 或 -o
find . \(-name "*.txt" -o -name "*.pdf"\) ⑤当前目录下,以linux开头并且以.pdf结尾的文件, 且 -a
find . \(-name "linux*"-a-name "*.pdf"\) ⑥-name是以文件名进行匹配,而-path将文件路径作为一个整体进行匹配
在/home目录下搜索包含sys的文件或则路径
find /home -path "*sys*" (2)否定参数
使用 ! 进行参数的否定
eg.
①在当前目录下搜索除了以.txt结尾的文件
find ! -name "*.txt" (3)基于目录深度的搜索
-mindepth 至少开始搜索的深度
-maxdepth 最多搜索的深度
eg.
①从第二层开始搜索
find / -mindepth 2 -name "*.pdf" ② 最大搜索4层
find / -maxdepth 4 -name "*.txt" ③只搜索一层
find / -maxdepth -name "*.chm" (4)让find跳过特定的目录
-prune 跳过指定目录
eg.
①在/opt/eclipse目录下搜索文件以.ini结尾的文件,并且跳过目录dropins目录
find /opt/eclipse \( -name "dropins" -prune\) -o \( -name "*.ini"\) (5)根据文件类型
文件类型类型参数普通文件f符号文件l目录d字符设备c块设备b套接字sFIFO(管道)p find -type 文件类型 commands eg.
①当前目录下查找文件
find . -type f ② 列出当前目录下的所有符号链接文件
find . -type l (6)根据文件时间戳
访问时间:用户最近一次访问文件的时间
修改时间:文件内容最后一次被修改的时间
变化时间:文件元数据(metadata, 例如权限或所有权)最后一次改变的时间
天分 具体时间前的
- 表示小于这个时间
+ 表示大于这个时间
访问时间atimeamin修改时间mtimemmin变化时间ctimecmin eg.
①当前目录下最近7天内被访问过的文件
find . -type f -atime -7 ②当前目录下被修改超过9天的文件
find . -type f -mtime +9 ③当前目录下被修改超过3分钟的文件
find . -type f -mmin +3 (7)基于文件大小
文件大小单位cbytew2 byteb块 (512byte) k
1024 byteM1024 kG1024 M eg.
①根目录下文件大小大于3K
find / -type f -size +3k ②根目录下文件大小小于2M
find / -type f -size -2M ③根目录下文件大小为2G
find / -type -size 2G (8)基于文件权限和所有权的匹配
-perm 指定搜索的文件的权限
-user 指定搜索某个用户的文件
eg.
①当前目录下的具有644权限的py文件
find . \( -type f -a -name "*.py" -a -perm 644 \) ②当前目录下,属于用户root的文件
find . -type f -user root (9)结合find命令使用 -exec 选项
使用-exec执行其他命令
eg.
①将当前目录下的root用户的文件改为my用户的
find . -type f -user root -exec chown my {} \; {}是一个特殊字符串,和-exec一起使用时,{}将用每一find的结果进行替换
②将当前目录下所有的txt文件合并到一个文件中
find . -type f -exec cat {} \; > all.txt 这里使用的是> 而没有使用>>,因为find命令的全部输出只是一个单一流,只有多个数据流被追加到同一个文件时才使用>>.
(10)删除匹配的文件
-delete可以删除find找到的文件
eg.
①删除当前目录下的.swap文件
find . -type f -name "*.swap"-delete
页:
[1]