如何在macOS系统中使用终端命令筛选时排除特定文件类型并只看特定目录及其子目录?
美国、香港服务器
如何在macOS系统中使用终端命令筛选时排除特定文件类型并只看特定目录及其子目录?
09-15 来源:
在 macOS 终端中,要实现 “只查看特定目录及其所有子目录,同时排除特定文件类型” 的筛选,可通过 find 命令结合参数实现,该命令会自动递归处理所有子目录,同时精准过滤不需要的文件类型。以下是具体方法和示例:
核心命令与参数
使用 find 命令的基本格式:
bash
find [特定目录路径] -type f -not -name "*.需要排除的扩展名"
[特定目录路径]:指定目标目录(如 ~/Documents),find 会自动递归扫描该目录下的所有子目录;
-type f:只筛选文件(可选,若需包含目录可省略);
-not -name "*.扩展名":排除以指定扩展名结尾的文件(支持多个 -not 叠加排除多种类型)。
实用示例
1. 基础:只看目标目录及子目录,排除单个文件类型
在 ~/Downloads 目录及其所有子目录中,列出所有非 .log 类型的文件:
bash
find ~/Downloads -type f -not -name "*.log"
结果会包含 ~/Downloads 下的文件,以及所有子目录(如 ~/Downloads/docs/、~/Downloads/videos/)中的非 .log 文件。
2. 排除多种文件类型(如压缩包、临时文件)
在 /var/www 目录及其子目录中,排除 .zip、.rar、.tmp 类型的文件:
bash
find /var/www -type f \
-not -name "*.zip" \
-not -name "*.rar" \
-not -name "*.tmp"
多个 -not -name 参数叠加,可同时排除多种文件类型;
若需包含目录(不仅是文件),去掉 -type f 即可。
3. 结合大小筛选:只看大于 100MB 且排除特定类型的文件
在 ~/Movies 目录及其子目录中,筛选大于 100MB 且不是 .mp4 格式的视频文件:
bash
find ~/Movies -type f -size +100M \
-not -name "*.mp4" \
-exec ls -lh {} \; # 显示文件大小、路径等详情
-size +100M:只匹配大小超过 100MB 的文件;
-exec ls -lh {} \;:对结果执行 ls -lh,以人性化方式显示文件详情。
4. 只看目录(排除文件)并排除特定目录类型
若需筛选目录(而非文件),并排除名称含 temp 的目录:
bash
# 在 ~/Workspace 及其子目录中,找所有不含 "temp" 的目录
find ~/Workspace -type d -not -name "*temp*"
-type d:只筛选目录(d 表示 directory);
-not -name "*temp*":排除名称中包含 temp 的目录(如 temp_dir、cache_temp)。
进阶:统计符合条件的文件大小总和
若需统计特定目录及其子目录中,排除指定类型后的所有文件总大小:
bash
# 统计 ~/Documents 中,排除 .pdf 和 .docx 后的文件总大小
find ~/Documents -type f -not -name "*.pdf" -not -name "*.docx" -exec du -ch {} + | grep total$
-exec du -ch {} +:对所有筛选结果执行 du -ch(c 显示总和,h 人性化单位);
grep total$:只显示最终的总大小(过滤中间结果)。
关键说明
递归特性:find 命令默认会递归扫描目标目录下的所有子目录,无需额外参数,直接实现 “包含子目录” 的需求;
路径灵活性:支持绝对路径(如 /Users/yourname/)和相对路径(如 ./docs,当前目录下的 docs 文件夹);
精准匹配:-name "*.log" 中的 * 是通配符,严格匹配 “以 .log 结尾” 的文件,避免误筛;
性能优化:相比扫描全系统,限定特定目录后性能消耗极低,即使子目录层级较深也不会明显影响系统运行。
总结
通过 find 命令的 [目录路径] 参数限定范围(包含子目录),结合 -not -name 排除特定文件类型,可高效实现筛选需求。根据场景添加 -type(文件 / 目录)、-size(大小)等参数,还能进一步精准过滤,适合在终端中批量处理文件或分析磁盘占用。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快