如何格式化fzf多选输出以适配mpv播放
mpv接收多选文件参数的问题
可行的操作
- 直接指定多个带空格的文件播放:
# 依次播放file1和file2: mpv "file1" "file 2"
- 通过fzf单选文件播放:
# 使用fzf选择单个文件并播放: mpv "$(fdfind . /path/to/Music | fzf)"
失效的场景
当使用fzf的-m参数多选文件时,以下命令无法正常工作(选择至少2个文件时失效):
mpv "$(fdfind . /path/to/Music | fzf -m)"
同样,用kdialog多选文件的命令也不能正常运行:
mpv "$(kdialog --getopenfilename --multiple /path/to/Music/)"
尝试过的无效处理
一开始以为问题是fzf -m返回的内容以换行分隔:
file1 file 2
于是用sed和awk处理输出,想把它格式化成"file1" "file 2"的形式:
fdfind . /path/to/Music | fzf -m | sed 's/^/"/;s/$/"/' | # 为每行添加双引号 awk 1 ORS=' ' | # 将换行替换为空格 head -c -1 | # 删除最后一个空格
但处理后的结果传给mpv还是无效。
例外情况
kdialog-open-files.lua这个用户脚本可以正常实现多选文件并传给mpv播放。
关键发现
手动多次调用fzf单选,把每个结果作为独立参数传给mpv是可行的:
mpv "$(fdfind . /path/to/Music | fzf)" "$(fdfind . /path/to/Music | fzf)"
由此可以确定,问题出在参数传递的方式上,而非文件路径本身。
内容的提问来源于stack exchange,提问作者Inspired_Blue
相关产品推荐
相关产品推荐

