【问题标题】:Use cat to combine mp3 files based on filename使用cat根据文件名组合mp3文件
【发布时间】:2014-09-13 12:30:15
【问题描述】:

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

节目名称 - Nov 28 2011 - Hour 1.mp3

节目名称 - Nov 28 2011 - Hour 2.mp3

节目名称 - Nov 28 2011 - Hour 3.mp3

节目名称 - Nov 28 2011 - Hour 4.mp3

节目名称 - Nov 29 2011 - Hour 1.mp3

节目名称 - 2011 年 11 月 29 日 - Hour 2.mp3

节目名称 - Nov 29 2011 - Hour 3.mp3

节目名称 - 2011 年 11 月 29 日 - Hour 4.mp3

显示名称 - Nov 30 2011 - Hour 1.mp3 等等...

我已经使用 cat 命令通过将相同日期的四个文件移动到一个文件夹并使用通配符来成功地连接文件:

cat *.mp3 > example.mp3

这些文件都是相同的比特率、采样率等。 我想做的是运行一个脚本,该脚本将查看文件名并结合每个日期的 1-4 小时并相应地命名文件。只需显示名称、日期并删除“Hour 1”即可。

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

我使用的是 Ubuntu 14.04。

在此先感谢

【问题讨论】:

  • 您知道二进制文件格式与纯文本有很大不同吗?我确定您只是生成了一个巨大的损坏文件,而您没有注意到,因为您的 MP3 播放器足够智能,可以修复播放时的损坏。
  • 我看了一点,发现了一些来回。这些仅供我个人使用,我并不太担心。如果这是一个生产场景,我会使用其他一些命令来重新编码文件等。不过,感谢您的提醒。

标签: bash mp3 cat


【解决方案1】:

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

由于您的文件名称中有空格,而我的解决方案使用通配符,您还必须编辑内部字段分隔符以在脚本执行期间忽略空格。

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。)

【讨论】:

  • 我把代码放到一个脚本中,并把文件命名为'testscript.sh'。当我从命令行执行时,我得到以下输出: cat: -.mp3: No such file or directory cat: Dec.mp3: No such file or directory cat : 21.mp3: 没有那个文件或目录 cat: -.mp3: 没有那个文件或目录 cat: Dec.mp3: 没有那个文件或目录 cat:22.mp3:没有这样的文件或目录 cat:-.mp3:没有这样的文件或目录 cat:Dec。 mp3: 没有这样的文件或目录 cat: 23.mp3: 没有这样的文件或目录 cat: -.mp3: 没有这样的文件或目录 cat: Dec.mp3: 没有这样的文件或目录---等等。
  • 我还得到了 13 个 0 字节的文件,命名为:/home/cainram/Desktop/2009-12/showName_21_full.mp3 showName_22_full.mp3 showName_23_full.mp3 showName_24_full.mp3 showName_25_full.mp3 showName_26_full.mp3 showName_27_full.mp3 showName_28_full.mp3 showName_29_full.mp3 showName_30_full.mp3 showName_31_full.mp3 showName_Dec_full.mp3 showName_-_full.mp3
  • 好点。你的文件名中有空格,所以我编辑了我的脚本。
  • 我现在得到一个文件(0bytes),名为:showName_- Dec 21 - Dec 22 - Dec 23 - Dec 24 - Dec 25 - Dec 26 - Dec 27 - Dec 28 - Dec 29 - Dec 30 - 12 月 31 日_满
  • 我可以使用批量重命名器从文件中删除空格或将它们替换为 - 如果这会有所帮助...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多