You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS终端或Shell脚本中对Unix文件路径做URL编码

在macOS终端或Shell脚本中生成标准file://格式的URL编码路径

需求说明

需要将Unix文件路径转换为与浏览器拖入文件后复制的URL完全一致的file://格式链接:

  • 输入路径:
    "/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3"
    
  • 期望输出:
    "file:///Volumes/Macintosh%20HD/Music/1-01%20%E3%83%86%E3%82%99%E3%82%B7%E3%82%99%E3%82%BF%E3%83%AB%E3%83%A9%E3%82%A4%E3%83%95.mp3"
    

实现方法

方法1:利用Python(macOS原生自带,无需额外安装)

Python的urllib.parse模块可精准处理URL编码,同时拼接file://前缀:

终端单行执行

python3 -c "import urllib.parse, sys; print('file://' + urllib.parse.quote(sys.argv[1]))" "/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3"

Shell脚本封装函数

encode_file_url() {
  python3 -c "import urllib.parse, sys; print('file://' + urllib.parse.quote(sys.argv[1]))" "$1"
}

# 调用示例
encoded_url=$(encode_file_url "/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3")
echo "$encoded_url"

方法2:使用AppleScript(系统原生实现,完全匹配浏览器行为)

通过AppleScript调用macOS系统组件生成标准file://链接,行为和浏览器拖入完全一致:

终端单行执行

osascript -e "set filePath to quoted form of \"$1\" as string" -e "return POSIX file filePath as URL" "/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3"

Shell脚本封装函数

encode_file_url() {
  osascript -e "set filePath to quoted form of \"$1\" as string" -e "return POSIX file filePath as URL"
}

# 调用示例
encoded_url=$(encode_file_url "/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3")
echo "$encoded_url"

方法3:借助curl的URL编码功能

利用curl自带的编码能力处理路径,再手动拼接前缀:

# 单行执行示例
encoded_path=$(curl -Gso /dev/null -w "%{url_effective}" --data-urlencode "path=/Volumes/Macintosh HD/Music/1-01 デ ジタルライフ.mp3" "" | cut -d'=' -f2)
echo "file://$encoded_path"

内容的提问来源于stack exchange,提问作者MagistraNocte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:15:34