1.什么是find
Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
2.语法
find path -option [ -print ] [ -exec -ok command ] {} \;
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
3.常用命令选项
命令 | 操作 |
---|---|
-mount, -xdev | 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 |
-amin n | 在过去 n 分钟内被读取过 |
-anewer file | 比文件 file 更晚被读取过的文件 |
-mtime n | 指定时间曾被更改过的文件或目录,单位以24小时计算 |
-mmin | 指定时间曾被更改过的文件或目录,单位以分钟计算 |
-atime n | 在过去n天内被读取过的文件 |
-cmin n : | 在过去 n 分钟内被修改过 |
-cnewer file | 比文件 file 更新的文件 |
-ctime n | 在过去n天内被修改过的文件 |
-empty | 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录 |
-ipath p, -path p | 路径名称符合 p 的文件,ipath 会忽略大小写 |
-name name, -iname name | 文件名称符合 name 的文件。iname 会忽略大小写 |
-size n | 根据文件大小进行查询 |
-type c | 根据文件类型进行查找文件类型是c的文件 |
-pid n | process id 是 n 的文件 |
-maxdepth n | 设置最大目录层级 |
-mindepth | 设置最小目录层级 |
-perm | 根据权限查找 |
-user | 根据用户进行查找 |
-path | 指定字符串作为目录进行查找 |
-ipath | 指定字符串作为目录进行查找,忽略大小写 |
-prune | 不寻找字符串作为查找文件或目录的条件 |
文件类型参数表
类型参数 | 作用 |
---|---|
f | 普通文件 |
d | 目录/文件夹 |
l | 符号连接 |
c | 字符设备 |
b | 块设备 |
s | 套接字 |
p | Fifo |
文件大小参数表
类型参数 | 单位 |
---|---|
b | 块(512字节) |
c | 字节 |
w | 字(2字节) |
k | 千字节 |
M | 兆字节 |
G | 吉字节 |
4.示例
(1)在/home
目录下查找以.txt
结尾的文件名
find /home/ -name "*.txt"
(2)查找/home/
下名称中带有passwd
的文件
find /home/ -name passwd
(3)在/home
目录下查找以.txt
结尾的文件名(忽略大小写)
find /home/ -iname "*.txt"
(4)当前目录及子目录下查找所有以.txt
和.pdf
结尾的文件
find . -name "*.txt" -o -name "*.pdf"
(5)根据正则表达式匹配文件路径
find . -regex 正则表达式
(6)找出当前目录下不是以.txt结尾的文件
find . ! -name "*.txt"
(7)向下1级目录查找命名包含“o”的文件/文件夹
find . -maxdepth 1 -name "*o*"
(8)查找距离当前目录至少2个子目录的所有文件
find . -mindepth 2 -type f
(9)当前目录下最近3天内被访问过的所有文件
find . -type f -atime -3
(10)当前目录下恰好在3天前被访问过的所有文件/文件夹
find . -atime 3
(11)当前目录下超过3天被访问过的所有文件
find . -type f -atime +3
(12)找出比test.txt修改时间更长的所有文件
find . -type f -newer test.txt
(13)查找大于10M(MB)的文件
find . -type f -size +10M
(14)在当前目录下查找空文件/目录
find . -empty
(15)查找当前目录下所有空文件和空目录并删除
find . -name "*" -type f -size 0c | xargs -n 1 rm -f
(16)批量删除搜索到的文件
find . -name "shuaige.txt" |xargs rm -rf
(17)当前目录下搜索出权限为777的文件
find . -type f -perm 777
(18)找出当前目录下权限不是777的txt文件
find . -type f -name "*.txt" ! -perm 777
(19)查找当前目录或者子目录下所有.txt文件,但是跳过子目录/user
find . -path "./user" -prune -o -name "*.txt" -print
(20) 移动当前目录下非 .txt 结尾的所有文件到opt目录下
find . -maxdepth 1 ! -name "*.txt" -exec mv {} /opt \;
最后:有什么不对的地方欢迎各位大神给我留言,本人会及时改正.