删除批处理脚本中的前导“./”

时间:2016-07-23 12:57:02

标签: bash scripting sox

for f in ./*.mp3; do sox "$f" "${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done

这是我用来处理音频文件的脚本。问题是它继续循环,处理新的音频文件。我想通过将输出放在子文件夹中来解决这个问题,所以我尝试了这个:

for f in ./*.mp3; do sox "$f" "/subfolder${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done

这是输出:

/subfolder./01processed.mp3

这给了我一个Sox的错误,我需要在文件名输出之前删除./,我该怎么做?这是我想要的输出:

/subfolder/01processed.mp3

2 个答案:

答案 0 :(得分:1)

for f in *.mp3; do sox "$f" "/subfolder/${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done

答案 1 :(得分:0)

for f in ./*.mp3; do
    out=${f#./}
    out=${out%%.mp3}processed.mp3
    sox "$f" "/subfolder/$out" silence 1 0.02 1% -1 0.02 1%
done

您可以删除前导./和尾随mp3,但参数扩展需要一次完成一个(它们不能嵌套)。你可能只删除前导.并在构建输出路径时保留/,但更明确地将其取出并明确地将其重新放回。 (/subfolder$out没有明确说明文件放在名为subfolder的文件夹中,而不是创建名为subfolder$out的文件/文件夹。)

顺便说一下,for f in ./*.mp3是最正确的版本,因为它适用于以-开头的文件;否则,sox可能会错误输入文件名作为选项。