find 查找文件或目录

find 路径 -命令参数 [输出形式]

-type:查找某一类型的文件或目录
d:目录
f:文件
b:块设备文件
c:字符设备文件
-name:按照名字查找文件或目录
-perm:按照权限查找文件或目录(644、755)
-mtime:按照文件更改的时间来查找文件或目录
-n:(-7)7天修改过的文件 -:表示以内
+n:(+7)7天前修改过的文件 +:表示以前
-nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-size:根据文件大小查找
b:代表 512 位元组的区块(如果用户没有指定后缀,则默认为 b)
c:表示字节数
k:表示 kilo bytes (1024字节)
w:字 (2字节)
M:兆字节(1048576字节)
G:千兆字节 (1073741824字节)
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中
-o:是或者的意思
-a:是而且的意思
-not:是相反的意思
-empty:搜索空文件或空目录

输出形式

输出形式很多,-print,-printf,-exec,-ok,-ls......

查找当前目录下所有 go 文件

find . -name "*.go"

查找文件名为memcache.pid的文件

find / -name memcached.pid -print

匹配相关的(使用 * 作为通配符)

ll
total 0
-rw-r–r– 1 root root 0 Sep 30 11:36 123
-rw-r–r– 1 root root 0 Sep 30 11:36 123_
-rw-r–r– 1 root root 0 Sep 30 11:36 456
-rw-r–r– 1 root root 0 Sep 30 11:36 789

[root@web01 ~/zhangqiang]$ find . -name “*123*”
./123
./123_

find . -name “123*”
./123
./123_

-name “文件名”:按文件名精确匹配(区分大小写),支持通配符 *(任意字符)、?(单个字符)、[](字符范围)。
-iname "文件名":按文件名匹配,忽略大小写

# 在当前目录搜索名为 "test.txt" 的文件
find . -name "test.txt"

# 在 /home 目录搜索所有 .sh 后缀的文件(区分大小写)
find /home -name "*.sh"

# 搜索文件名包含 "log" 的文件(如 access.log、error_log)
find /var -name "*log*"
# 在 /tmp 目录搜索所有子目录(不包括文件)
find /tmp -type d

# 在当前目录搜索所有符号链接文件
find . -type l

# 搜索 /usr/bin 下所有可执行文件(普通文件类型)
find /usr/bin -type f
# 搜索当前目录下大小超过 100MB 的文件
find . -type f -size +100M

# 搜索 /var/log 下大小小于 1KB 的日志文件
find /var/log -type f -name "*.log" -size -1k

# 搜索大小正好为 512字节(1块)的文件
find . -type f -size 1b
# 搜索当前目录下 7天内修改过的 .txt 文件
find . -type f -name "*.txt" -mtime -7

# 搜索 /var/log 下 30天前(超过30天)未修改的日志文件(可清理)
find /var/log -type f -name "*.log" -mtime +30

# 搜索 2天前(正好2天)访问过的文件
find . -type f -atime 2
# 搜索当前目录下权限为 755 的文件(用户可读可写可执行,组和其他可读可执行)
find . -type f -perm 755

# 搜索权限为 600 的文件(仅所有者可读可写)
find . -type f -perm 600
# 搜索其他用户有写权限的文件(权限包含 002)
find . -type f -perm -002# 其他用户写权限位为

逻辑组合条件(与 / 或 / 非)

多个条件可通过逻辑运算符组合:

-a:逻辑 “与”(默认,可省略),即同时满足多个条件;
-o:逻辑 “或”,满足任一条件即可;
! 或 -not:逻辑 “非”,排除满足条件的结果。
# 搜索 7天内修改过的 .sh 文件(且关系,-a 可省略)
find . -type f -name "*.sh" -mtime -7

# 搜索 .txt 或 .md 后缀的文件(或关系)
find . -type f -name "*.txt" -o -name "*.md"

# 搜索不是 root 所有的 .log 文件(非关系)
find /var/log -type f -name "*.log" ! -user root

执行命令(-exec,最强大)

语法:find … -exec 命令 {} \;

{}:代表找到的每个文件 / 目录的路径;

\;:表示命令结束(必须转义,避免被 shell 解析)。

# 搜索所有 .txt 文件,并显示其详细信息(等价于对每个文件执行 ls -l)
find . -type f -name "*.txt" -exec ls -l {} \;

# 搜索 30天前的 .log 文件,并删除(谨慎使用!)
find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;

# 搜索所有 .sh 文件,复制到 /tmp/scripts 目录
mkdir -p /tmp/scripts
find . -type f -name "*.sh" -exec cp {} /tmp/scripts/ \;

 

作者 dmxsp

发表回复

您的电子邮箱地址不会被公开。