如何查找系统所有目录中的*.mp3文件并获取其绝对路径?
嘿,这个需求我经常碰到,给你分不同操作系统整理了几种实用方法,直接复制命令就能用:
在 Linux/macOS 系统中查找所有 *.mp3 文件并获取绝对路径
方法1:使用 find 命令(最可靠、实时更新)
这是最通用的方式,能实时遍历系统所有目录,返回精准的绝对路径:
find / -type f -name "*.mp3" -print
参数解释:
/:从系统根目录开始搜索(如果你只想搜某个特定目录,把这个换成目录路径就行,比如~/Music)-type f:只搜索文件(排除目录、符号链接等)-name "*.mp3":匹配后缀为.mp3的文件(大小写敏感,如果要忽略大小写,换成-iname "*.mp3")-print:输出找到的文件绝对路径
如果遇到大量权限不足的报错(比如访问系统保护目录),可以把错误信息屏蔽掉:
find / -type f -name "*.mp3" ! -path "/proc/*" ! -path "/sys/*" 2>/dev/null
! -path "/proc/*":排除/proc目录(系统进程虚拟目录,没必要搜)2>/dev/null:把错误输出重定向到空设备,避免屏幕被一堆权限错误刷屏
方法2:使用 locate 命令(更快,但需要更新数据库)
如果你的系统有locate工具,搜索速度会比find快很多,但它依赖本地索引数据库,不是实时的:
# 先更新索引(需要管理员权限) sudo updatedb # 搜索所有.mp3文件的绝对路径 locate -b "*.mp3"
-b:只匹配文件名部分,避免路径中包含.mp3的目录被误匹配
在 Windows 系统中查找所有 *.mp3 文件并获取绝对路径
方法1:使用命令提示符(CMD)
打开CMD(可以右键开始菜单选择「命令提示符」),输入以下命令:
# 搜索C盘所有.mp3文件,返回绝对路径 dir /s /b "C:\*.mp3"
参数解释:
/s:递归搜索所有子目录/b:只输出纯路径(不显示文件大小、日期等额外信息)
如果要搜索多个盘符(比如C、D、E盘),可以用循环遍历:
for %d in (C D E) do @dir /s /b "%d:\*.mp3"
方法2:使用 PowerShell(更灵活,推荐)
PowerShell的功能更强大,处理结果也更方便:
# 搜索C盘所有.mp3文件,返回绝对路径 Get-ChildItem -Path C:\ -Filter *.mp3 -Recurse -File | Select-Object -ExpandProperty FullName
参数解释:
-Recurse:递归子目录-File:只搜索文件(排除目录)Select-Object -ExpandProperty FullName:只提取文件的绝对路径字段
如果要搜索所有本地盘符,可以自动遍历所有文件系统盘符:
Get-PSDrive -PSProvider FileSystem | ForEach-Object { Get-ChildItem -Path $_.Root -Filter *.mp3 -Recurse -File | Select-Object FullName }
小提示
- 搜索整个系统可能需要几分钟,取决于你的文件数量和硬盘速度
- Linux/macOS下如果遇到权限问题,加
sudo前缀执行命令即可访问系统保护目录 - Windows下如果无法访问某些系统目录,右键以「管理员身份」打开CMD/PowerShell再执行命令
内容的提问来源于stack exchange,提问作者Erie Msi
相关产品推荐
相关产品推荐

