如何在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
相关产品推荐
相关产品推荐

