find 是 Linux/Unix 系统中一个非常强大的命令行工具,用于在目录树中查找文件和目录,并对其执行操作。它支持根据多种条件(如文件名、类型、大小、权限、时间等)进行搜索,并且可以对找到的文件执行特定的操作(如删除、移动、复制等)。
基本语法
find [路径] [表达式] [操作]
- 路径:指定查找的起始目录(如
/表示根目录,.表示当前目录)。 - 表达式:定义查找的条件(如按文件名、类型、大小等)。
- 操作:对找到的文件执行的操作(如删除、打印等)。
常用选项和表达式
1. 按文件名查找
-name "模式":按文件名匹配(区分大小写)。
find /home -name "file.txt"
-iname "模式":按文件名匹配(不区分大小写)。
find /home -iname "file.txt"
2. 按文件类型查找
-type:按文件类型查找。
f:普通文件。d:目录。l:符号链接。
find /var -type f
3. 按文件大小查找
-size:按文件大小查找。
+n:大于n个单位。-n:小于n个单位。n:等于n个单位。- 单位可以是
c(字节)、k(KB)、M(MB)、G(GB)。
find /var/log -size +10M
4. 按时间查找
-
-mtime:按文件修改时间查找。+n:n天前修改。-n:n天内修改。
find /tmp -mtime -7
-atime:按文件访问时间查找。-ctime:按文件状态变更时间查找。
5. 按权限查找
-
-perm:按文件权限查找。find /home -perm 644
6. 按用户或组查找
-
-user:按文件所有者查找。find /home -user alice -
-group:按文件所属组查找。find /home -group developers
常用操作
1. 打印文件路径(默认操作)
find /home -name "*.txt"
2. 删除文件
- 使用
-delete:
find /tmp -name "*.log" -delete
- 使用
-exec:
find /tmp -name "*.log" -exec rm -f {} \
3. 移动文件
find /home -name "*.bak" -exec mv {} /backup ;
4. 执行任意命令
- 使用
-exec:
find /var/log -name "*.log" -exec gzip {} ;
- 使用
xargs:
find /var/log -name "*.log" | xargs rm -f
高级用法
1. 组合条件
-
-a(AND) :同时满足多个条件(默认)。find /home -name "*.txt" -type f -
-o(OR) :满足任意一个条件。find /home -name "*.txt" -o -name "*.log" -
!(NOT) :排除条件。find /home ! -name "*.txt"
2. 限制查找深度
-
-maxdepth:限制查找的最大深度。find /home -maxdepth 2 -name "*.txt" -
-mindepth:设置查找的最小深度。find /home -mindepth 2 -name "*.txt"
3. 处理空格或特殊字符
-
使用
-print0和xargs -0:find /home -name "*.txt" -print0 | xargs -0 rm -f
示例
- 查找当前目录下所有
.log文件并删除:
find . -name "*.log" -delete
- 查找
/var/log目录下大于 100MB 的文件并压缩:
find /var/log =size +100M -exec gzip {} \;
- 查找
/home目录下 7 天内修改过的.txt文件:
find /home -mtime -7 -name "*.txt"