如何在终端中筛选特定目录下的特定文件类型?
美国、香港服务器
如何在终端中筛选特定目录下的特定文件类型?
09-15 来源:
在终端中筛选特定目录下的特定文件类型,核心是通过 find 命令(支持递归子目录)或 ls 命令(仅当前目录,需配合通配符)实现,具体方法根据是否需要包含子目录分为两种场景,以下是详细步骤和示例:
一、核心命令选择:先明确需求
需求场景 推荐命令 特点
仅筛选「当前目录」的目标文件 ls 简单快捷,不递归子目录
筛选「目录 + 所有子目录」的目标文件 find 功能强大,默认递归,支持精准过滤
二、场景 1:仅筛选「当前目录」的特定文件类型
如果只需查看 当前工作目录 下的特定类型文件(不包含子目录),用 ls 命令配合 通配符 * 即可,格式如下:
bash
ls [选项] *.目标扩展名
*.目标扩展名:通配符 * 表示 “任意字符”,*.txt 即 “所有以 .txt 结尾的文件”;
常用选项:-l(显示文件详情,如大小、修改时间)、-h(人性化显示大小,如 KB/MB)。
实用示例
查看当前目录下所有 .pdf 文件(仅文件名):
bash
ls *.pdf
查看当前目录下所有 .jpg 和 .png 图片(多类型匹配):
bash
ls *.jpg *.png # 用空格分隔多个类型
查看当前目录下 .md 文档的详情(大小、修改时间):
bash
ls -lh *.md # -l 显示详情,-h 人性化大小
三、场景 2:筛选「特定目录 + 所有子目录」的特定文件类型
如果需要 递归包含子目录(如 “~/Documents 及其所有子目录下的 .docx 文件”),必须用 find 命令,它会自动扫描目标目录的所有层级子目录,格式如下:
bash
find [目标目录路径] -type f -name "*.目标扩展名"
参数解析:
[目标目录路径]:指定要筛选的目录(如 ~/Downloads、/Users/yourname/Pictures);
-type f:仅筛选 “文件”(避免包含目录,若需包含目录可去掉此参数);
-name "*.目标扩展名":精准匹配 “以指定扩展名结尾的文件”(引号不可省略,防止通配符被终端提前解析)。
实用示例
基础:查找 ~/Documents 及其子目录下所有 .docx 文件:
bash
find ~/Documents -type f -name "*.docx"
结果会列出所有子目录(如 ~/Documents/work/、~/Documents/study/)中的 .docx 文件路径。
进阶:查找指定目录下的 .mp4 文件,并显示文件大小和详情:
bash
find ~/Movies -type f -name "*.mp4" -exec ls -lh {} \;
-exec ls -lh {} \;:对每个找到的 .mp4 文件执行 ls -lh 命令,显示大小、修改时间等详情;
{} 是占位符,代表找到的文件路径。
精准:查找 /var/log 目录下(含子目录)名称以 error 开头且后缀为 .log 的文件:
bash
find /var/log -type f -name "error*.log"
通配符 * 可灵活使用,error*.log 匹配 error1.log、error_2024.log 等。
四、关键注意事项
路径格式:
绝对路径:如 /Users/yourname/Documents(完整路径,任何目录下都可用);
相对路径:如 ./docs(当前目录下的 docs 文件夹,. 代表当前目录)。
区分大小写:
默认情况下,终端命令区分大小写(如 *.PDF 和 *.pdf 是两种类型);
若需忽略大小写(同时匹配 .PDF 和 .pdf),在 find 命令中用 -iname 代替 -name:
bash
find ~/Documents -type f -iname "*.pdf" # 匹配 .pdf 和 .PDF
排除无关文件:
若需在筛选特定类型时排除部分文件(如排除 tmp*.docx),可叠加 -not 参数:
bash
find ~/Documents -type f -name "*.docx" -not -name "tmp*.docx"
总结
仅当前目录:用 ls *.扩展名,简单高效;
包含子目录:用 find 目录路径 -type f -name "*.扩展名",功能全面;
按需添加 -exec ls -lh {} \; 可查看文件详情,满足大多数筛选需求。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快