macOS下使用xld命令行结合cue文件分割转换ape音频问题求助
XLD 整轨音频批量分割转FLAC命令修复方案
错误原因
你写的命令存在两处核心问题:
- 单引号嵌套冲突:
sh -c的参数用单引号包裹的前提下,内部sed的替换规则又用了单引号,会提前截断shell命令字符串,导致解析完全错误。 - 逻辑顺序错误:你用管道把
sed和xld串联,但xld的-c参数需要直接传入cue文件路径,不是从标准输入读取内容,原写法实际是把xld的输出传给sed,和你要实现的「替换ape后缀为cue作为参数」逻辑完全相反。
可用命令
最优写法(无需sed,用shell原生参数扩展)
find . -name "*.ape" -exec sh -c 'cue_file="${1%.ape}.cue"; xld "$1" -f flac -c "$cue_file"' _ {} \;
实现逻辑:
- 用
${1%.ape}直接删除ape文件路径末尾的.ape后缀,拼接.cue直接得到对应cue文件路径,性能更好也不会有引号冲突 - 所有变量用双引号包裹,兼容带空格、特殊字符的路径
兼容sed的写法
如果你需要保留sed逻辑,可用以下命令,用双引号包裹sed规则避免引号冲突,同时用$()捕获sed输出作为参数:
find . -name "*.ape" -exec sh -c 'cue_file=$(echo "$1" | sed "s/\.ape$/.cue/"); xld "$1" -f flac -c "$cue_file"' _ {} \;
鲁棒增强版(跳过无对应cue的文件)
增加存在性判断,避免cue文件不存在时报错终止:
find . -name "*.ape" -exec sh -c 'cue_file="${1%.ape}.cue"; [ -f "$cue_file" ] && xld "$1" -f flac -c "$cue_file" || echo "跳过 $1:未找到对应cue文件"' _ {} \;
内容的提问来源于stack exchange,提问作者t4ngl
相关产品推荐
相关产品推荐

