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/ \;