【发布时间】:2015-11-15 16:29:57
【问题描述】:
我正在测试带有参数扩展的 bash 文件名替换,如下所示:How to change file extension in Linux shell script?
但是,我似乎无法按我的意愿执行以下操作:
给定以下文件:
tmp/01. Losing A Whole Year.flac
tmp/02. Narcolepsy.flac
我将 find 用于 flac 文件到 parallel 运行 echo 命令以测试输出。我正在尝试用.mp3 替换.flac。
find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.flac%%.mp3}"'
我的输出是:
tmp/01. Losing A Whole Year.flac {.flac%%.mp3}
tmp/02. Narcolepsy.flac {.flac%%.mp3}
如果有影响的话,我打算将它与 ffmpeg 一起使用。
编辑: 预期输出:
tmp/01. Losing A Whole Year.flac tmp/01. Losing A Whole Year.mp3
tmp/02. Narcolepsy.flac tmp/02. Narcolepsy.mp3
编辑 2: 要替换文件扩展名,我可以使用:
find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.flac%%.mp3}"'
但是,这提供了以下输出
tmp/01. Losing A Whole Year.flac tmp/01.\ Losing\ A\ Whole\ Year.mp3
tmp/02. Narcolepsy.flac tmp/02.\ Narcolepsy.mp3
现在可能这是一个 ffmpeg 问题,因为如果有 \ 字符代替空格字符,ffmpeg 将无法找到文件。
【问题讨论】:
-
事情没有按预期工作,因为您使用的是并行替换,而不是 Bash。 Bash 替换以
$为前缀。