我想使用 lame 压缩我的整个音乐收藏(实际上是它的副本)。因此,很自然地,文件夹中会有文件夹,文件名中也可能会有奇怪的字符。我使用了图形声音转换器也一样,但我不喜欢它,因为它有预定义的比特率。
到目前为止我已经尝试过:
$ find . -name "*.mp3" | lame -b 160
和
$ find . -name "*.mp3" > list
$ cat list | lame -b 160
和
$ lame -b 160 < list
所有这些都给我带来了使用错误。正确的做法是什么?此外,如果有办法覆盖原始文件,我会太高兴的。
答案1
lame
无法从输入中读取文件名。您必须使用find
's-exec
或xargs
对找到的每个文件运行它:
find . -iname '*.mp3' -exec lame -b {} \;
如果未指定第二个文件名,lame
则会将另一个文件名附加.mp3
到给定的文件名并写入该文件。lame
不支持写入同一文件。您必须转换为另一个文件,然后将其复制到原始文件上:
find . -iname '*.mp3' -exec sh -c 'lame -b 160 "$0" "$0"-160 && mv "$0"-160 "$0"' {} \;
答案2
尝试以下操作:
首先从文件名中删除空格,因为它们似乎会引起麻烦:
for f in $(find . -name "*.mp3"); do rename "s/\s+/_/g" *; done
执行循环并遍历所有文件:
for f in $(find . -name "*.mp3"); do lame -b 160 "$f" tmp && mv tmp "$f"; done
现在您将用 lame 创建的文件覆盖原始文件。