Bash:使用{}替换文件扩展名

时间:2015-11-15 16:29:58

标签: bash parameter-expansion

我正在使用参数展开测试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命令以测试输出。我尝试将.flac替换为.mp3

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将无法找到该文件。

1 个答案:

答案 0 :(得分:1)

我想我明白了:

find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.}.mp3"'

将产生预期的结果。

虽然,我不知道为什么这不起作用:

find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.flac}.mp3"'

编辑: 虽然上述内容似乎有效,但会插入\个字符来替换空格,这会导致ffmpeg找不到所需的文件。