使用cat根据文件名组合mp3文件

时间:2014-07-22 15:30:13

标签: bash mp3 cat

我有大量下载的广播节目,每个节目包含4个mp3文件。这些文件的名称如下:

显示名称 - 2011年11月28日 - 小时1.mp3

显示名称 - 2011年11月28日 - 小时2.mp3

显示名称 - 2011年11月28日 - 小时3.mp3

显示名称 - 2011年11月28日 - 小时4.mp3

显示名称 - 2011年11月29日 - 小时1.mp3

显示名称 - 2011年11月29日 - 小时2.mp3

显示名称 - 2011年11月29日 - 小时3.mp3

显示名称 - 2011年11月29日 - 小时4.mp3

显示名称 - 2011年11月30日 - 小时1.mp3等等......

通过将同一日期的四个文件移动到一个文件夹并使用通配符,我已经使用cat命令加入文件并取得了巨大的成功:

cat *.mp3 > example.mp3

文件的比特率,采样率等都相同。 我想要做的是运行一个脚本,该脚本将查看文件名并将每个日期的1-4小时结合起来并相应地命名文件。只是节目名称,日期并删除小时1'。

我环顾四周,发现了许多可用于根据名称移动文件的脚本,但我对bash脚本不够熟练,无法理解所使用的方法并根据我的需要调整它们

我正在使用Ubuntu 14.04。

非常感谢提前

1 个答案:

答案 0 :(得分:0)

您可以使用bash for循环查找每个不同的日期名称,然后从中构建预期的mp3名称。

由于您的文件名称中包含空格而我的解决方案使用了globbing,因此您还必须编辑内部字段分隔符以在脚本持续时间内忽略空格。

SAVEIFS=$IFS
IFS=$'\n\b'
for mdy in `/bin/ls *mp3 | cut -d' ' -f'4,5,6' | sort -u`; do
    cat *${mdy}*.mp3 > "showName_${mdy}_full.mp3"
done
IFS=$SAVEIFS

如果某个特定日期缺少一些小时,则不会提醒您。它只会加入那个日期的任何地方。

注意:评论指出cat可能不会对这些文件起作用。生成的文件可能已损坏。您可能希望使用mencoderffmpeg之类的内容。 (查看this thread。)