加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Debian下的Sox批处理程序

发布时间:2020-12-14 00:34:49 所属栏目:Linux 来源:网络整理
导读:我想重新采样我在文件夹上获得的一堆wav文件. 我的脚本是这样的: for f in *.wav; do sox “$f” -r 48000 “${f%%%.wav}.wav”; done 控制台给我这个错误:“sox FAIL格式:无法打开输入文件`”90.wav“’:没有这样的文件或目录”等等,放置在该文件夹上的
我想重新采样我在文件夹上获得的一堆wav文件.

我的脚本是这样的:

for f in *.wav; do sox “$f” -r 48000 “${f%%%.wav}.wav”; done

控制台给我这个错误:“sox FAIL格式:无法打开输入文件`”90.wav“’:没有这样的文件或目录”等等,放置在该文件夹上的300个文件.

如何批量处理这些文件?为什么它给我这个错误?

非常感谢!

解:

for i in *wav; do echo $i; sox $i -r 48000 ${i%%.wav}r.wav; done

解决方法

摘要:这是引号符号

问题在于双引号:

for f in *.wav; do sox “$f” -r 48000 “${f%%%.wav}.wav”; done

上面的双引号是非标准的.要使它们由shell正确处理,必须使用标准的ASCII引号:

for f in ./*.wav; do sox "$f" -r 48000 "${f%%%.wav}.wav"; done

另外,请注意${f %%%.wav}会从输入文件名的末尾删除所有出现的%.wav. ${f %%%.wav} .wav在删除任何%.wav后缀后,将一个.wav重新添加到最后.你可能想要别的东西.

验证

根据问题,使用错误的引号字符,观察错误消息:

$for f in *.wav; do sox “$f” -r 48000 “${f%%%.wav}.wav”; done
sox FAIL formats: can't open input file `“90.wav”': No such file or directory

请注意,错误消息中的文件名显示为文件名周围有两组引号.这是您在问题中根据错误消息看到的内容.外部单引号由sox提供.内部双引号是命令行中提供的有趣引号字符.因为它们是非标准字符,所以shell将它们保留在原位并将它们传递给sox命令.

文件90.wav存在时,不存在名称为“90.wav”的文件.因此,错误.

结论

坚持使用shell命令的标准ASCII字符.

如果使用花哨的文字处理编辑器输入shell命令,而这些编辑器可以替换为排版漂亮但非标准的字符,则很容易发生此问题.正如三人指出的那样,当从具有不适当的排版样式的网站进行复制和粘贴时也会发生这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读