dir /s /ad "文件夹名"
命令(CMD)或 Get-ChildItem -Path "路径" -Directory -Recurse -Filter "*名*"
(PowerShell),在 Linux/macOS 中使用 find /搜索路径 -type d -name "文件夹名"
命令,星号 *
可匹配任意字符。在计算机管理中,有时你需要快速找到特定名称或位于特定位置的文件夹,尤其是在处理大量文件或进行自动化脚本编写时,图形界面点击查找虽然直观,但效率往往不如命令行(Command Line)方式高,命令行查找不仅速度快、功能强大,而且可以精确匹配,是高级用户和系统管理员的首选工具。
本文将详细介绍在主流操作系统(Windows, macOS, Linux)上如何使用命令行查找文件夹,掌握这些命令,能显著提升你的工作效率。
核心原理:
命令行查找文件夹的核心是告诉系统:
- 从哪里开始找(指定搜索路径)。
- 找什么(指定文件夹名称或匹配模式)。
- 如何找(是否进入子目录递归搜索)。
在 Windows 系统中查找文件夹
Windows 主要提供两种命令行环境:传统的命令提示符 (cmd.exe) 和更强大的 PowerShell。
方法 1:使用 dir
命令 (命令提示符 – cmd.exe)
dir
命令是 Windows 最基础的目录列表命令,结合参数可以用于查找文件夹。- 基本语法:
dir <路径> /s /ad <搜索模式>
- 参数详解:
<路径>
: 指定开始搜索的目录。C:Users
或 (表示当前目录),如果省略,默认为当前目录。/s
: 递归搜索,这是关键参数,表示不仅搜索指定目录,还会进入其所有子目录进行搜索。/ad
: 只显示目录 (Attribute: Directory),这确保结果只包含文件夹,排除文件。<搜索模式>
: 指定要查找的文件夹名称或通配符模式,常用通配符:- : 匹配任意字符任意次数(
*project*
匹配所有名称中包含 “project” 的文件夹)。 - : 匹配单个任意字符(
data?
匹配 “data1”, “dataA” 等)。
- : 匹配任意字符任意次数(
/b
(可选): 简洁格式,只显示文件夹的完整路径,不显示大小、日期等额外信息,结果更清晰。
- 常用示例:
- 在当前目录及其所有子目录中查找名为 “Reports” 的文件夹:
dir /s /ad "Reports"
- 在 D 盘根目录及其所有子目录中查找名称包含 “Backup” 的文件夹 (使用通配符):
dir D: /s /ad "*Backup*"
- 在 “C:Projects” 目录及其子目录中查找以 “2025” 开头的文件夹 (简洁格式输出):
dir "C:Projects" /s /ad /b "2025*"
- 在当前目录及其所有子目录中查找名为 “Reports” 的文件夹:
- 重要提示:
- 如果路径或搜索模式包含空格,必须用双引号 () 包裹起来(如示例 1 和 3)。
- 搜索可能花费一些时间,尤其是在大范围(如整个 C 盘)或包含大量文件的目录中。
方法 2:使用 Get-ChildItem
命令 (PowerShell)
PowerShell 的 Get-ChildItem
(别名 dir
, ls
, gci
) 功能更强大、灵活,是推荐的方式。
- 基本语法 (查找文件夹):
Get-ChildItem -Path <路径> -Recurse -Directory | Where-Object { $_.Name -like "<模式>" }
- 参数和管道详解:
-Path <路径>
: 指定开始搜索的目录,默认为当前目录。-Recurse
: 递归搜索,等同于 cmd 的/s
。-Directory
: 只获取目录项,这是 PowerShell 特有的便捷参数,直接过滤出文件夹。- (管道符): 将
Get-ChildItem
找到的所有文件夹对象传递给下一个命令处理。 Where-Object { ... }
: 对管道传来的每个对象进行条件过滤。$_.Name
: 在Where-Object
脚本块中,$_
代表当前管道中的对象(一个文件夹),.Name
是其名称属性。-like "<模式>"
: 匹配运算符,支持通配符 和 ,模式通常需要用引号包裹,还有其他匹配运算符如-eq
(精确等于)、-match
(正则表达式) 等。
- 常用示例:
- 在当前目录及其所有子目录中查找名为 “Documents” 的文件夹:
Get-ChildItem -Recurse -Directory | Where-Object { $_.Name -eq "Documents" }
- 在 “C:Work” 目录及其子目录中查找名称包含 “Client” 的文件夹:
Get-ChildItem -Path "C:Work" -Recurse -Directory | Where-Object { $_.Name -like "*Client*" }
- 在用户主目录 (
$HOME
) 及其子目录中查找以 “Temp” 开头的文件夹 (简洁输出完整路径):(Get-ChildItem -Path $HOME -Recurse -Directory -Filter "Temp*").FullName
- 这里使用了
-Filter
参数直接在Get-ChildItem
阶段过滤名称(只支持简单通配符,效率更高),然后通过.FullName
属性直接输出文件夹的完整路径。
- 这里使用了
- 在当前目录及其所有子目录中查找名为 “Documents” 的文件夹:
- 优势:
- 结果以对象形式返回,方便后续处理(如删除、移动、获取属性等)。
- 过滤条件更灵活强大(可使用正则表达式
-match
,复杂逻辑判断等)。 - 命令结构更清晰易读。
在 macOS 和 Linux 系统中查找文件夹
macOS 和 Linux 都基于 Unix,共享强大的 find
命令,这是查找文件夹(目录)的最核心工具。
- 基本语法:
find <起始路径> -type d -name "<模式>"
- 参数详解:
<起始路径>
: 指定搜索开始的目录。/Users/YourName
或 (根目录,需谨慎) 或 (当前目录)。必须指定。-type d
: 指定查找类型为目录 (Directory),这是关键参数,确保只找到文件夹。-name "<模式>"
: 按名称匹配。<模式>
可以使用 shell 通配符:- : 匹配任意字符任意次数(
*data*
)。 - : 匹配单个任意字符(
project?
)。 [abc]
: 匹配括号内任意一个字符(log[123]
)。- 注意: 模式通常区分大小写,如果路径或模式包含空格或特殊字符(如 , ,
[
,]
),必须用单引号 () 或双引号 () 包裹起来,建议优先使用单引号。
- : 匹配任意字符任意次数(
- 常用示例:
- 在当前目录 () 及其所有子目录中查找名为 “Downloads” 的文件夹:
find . -type d -name "Downloads"
- 在用户主目录 () 及其子目录中查找名称包含 “backup” 的文件夹 (注意大小写):
find ~ -type d -name '*backup*'
- 在整个系统 () 中查找名为 “config” 的文件夹 (需要管理员权限
sudo
,且可能输出大量权限错误):sudo find / -type d -name "config" 2>/dev/null
sudo
: 以管理员权限运行(需要输入密码)。2>/dev/null
: 将错误信息(如 “Permission denied”)重定向到空设备,使输出结果更干净。
- 在当前目录 () 及其所有子目录中查找名为 “Downloads” 的文件夹:
find
的强大之处:- 除了
-name
,还有众多其他条件可用,如按修改时间 (-mtime
)、文件大小 (-size
)、所有者 (-user
)、权限 (-perm
) 等。 - 可以对找到的结果执行操作 (
-exec
或-delete
),功能极其强大(使用需谨慎)。
- 除了
- 替代方案:
locate
/mlocate
- 命令:
locate <模式>
或mlocate <模式>
- 原理: 搜索一个预建好的文件名数据库 (
updatedb
),速度极快。 - 局限性:
- 数据库不是实时的,新建的文件/文件夹需要等待
updatedb
任务运行(通常每天自动运行一次)或手动运行sudo updatedb
后才能找到。 - 默认不区分文件/文件夹类型,要只查找文件夹,通常需要结合
grep
:locate -b '<模式>' | grep '/$'
-b '<模式>'
:防止模式被解释为选项,
<
和>
表示单词边界(精确匹配单词),-b
只匹配路径的基本名(最后一部分)。| grep '/$'
: 用grep
过滤输出, 匹配以斜杠 结尾的行(在locate
输出中,目录通常以 。
- 数据库不是实时的,新建的文件/文件夹需要等待
- 示例: 快速查找名称精确为 “Documents” 的文件夹:
locate -b 'Documents' | grep '/$'
- 命令:
实际应用与注意事项
- 明确搜索范围: 尽量缩小起始路径范围(如
C:UsersYourNameDocuments
或~/Projects
),从根目录(C:
, )搜索会非常慢,并可能产生大量无关结果或权限错误。 - *善用通配符 (`?
):** 它们是模糊匹配的关键。
project比
project` 能匹配到更多包含 “project” 的文件夹。 - 处理空格和特殊字符:
- Windows (cmd/PowerShell): 路径和包含通配符的模式必须用双引号 () 包裹。
- macOS/Linux (find/locate): 路径和包含通配符 (, ,
[
,]
) 或空格、、 等特殊字符的模式必须用单引号 () 或双引号 () 包裹,单引号内的内容会被原样传递,通常更安全。
- 权限问题:
- 在 macOS/Linux 上搜索系统目录或他人目录时,常会遇到 “Permission denied”,使用
sudo
可以解决(需谨慎),或用2>/dev/null
(find) 或locate
忽略这些错误。 - 在 Windows 上,如果以非管理员身份运行命令提示符或 PowerShell,也可能无法访问某些受保护目录。
- 在 macOS/Linux 上搜索系统目录或他人目录时,常会遇到 “Permission denied”,使用
- 输出解读:
- Windows
dir /s /ad
会列出找到的每个文件夹及其路径、日期等信息。/b
只显示路径。 - PowerShell
Get-ChildItem ... | Where-Object ...
默认输出文件夹对象(显示模式、名称、最后写入时间等),.FullName
只输出路径。 find
命令默认输出匹配项的完整路径。locate ... | grep '/$'
输出以 结尾的完整路径。
- Windows
- 安全提示: 对命令行返回的结果执行操作(尤其是删除
-delete
或rm -rf
)务必极其谨慎,最好先不加操作参数运行命令,仔细检查结果无误后再执行操作,避免在根目录执行破坏性命令。
掌握命令行查找文件夹的技能是提升计算机操作效率的重要一步,无论是 Windows 的 dir /s /ad
和 PowerShell Get-ChildItem
, 还是 macOS/Linux 的 find -type d
,核心都在于指定路径、递归搜索 (/s
, -Recurse
, find
默认递归)、过滤类型 (/ad
, -Directory
, -type d
) 和名称匹配 (<模式>
, -like
, -name
),根据你的操作系统和具体需求选择合适的命令,并注意路径、通配符、引号和权限的处理,多加练习,你就能快速精准地定位到所需的文件夹。
引用说明:
- Microsoft Docs –
dir
命令: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/dir - Microsoft Docs –
Get-ChildItem
(PowerShell): https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem - GNU
find
手册: https://www.gnu.org/software/findutils/manual/html_mono/find.html (适用于 Linux) - macOS
find
手册页 (在终端运行man find
) locate
/mlocate
手册页 (在终端运行man locate
或man mlocate
)
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/27339.html