我有以下命令返回 mp3 文件的文件名和长度:
mp3info -p "%f: %m:%02s\n" *.mp3
Run Code Online (Sandbox Code Playgroud)
如何在 bash 脚本中使用它来返回给定目录中所有 mp3 文件的总长度(总和)?我想要以下符号:mm:ss
我会采取三步走的方法:
\n\nfilename.mp3: mm:ss\\n文件名并打印总秒数,而不是打印第一步很简单
\n\nmp3info -o \'%S\' \nRun Code Online (Sandbox Code Playgroud)\n\n会做这项工作。现在,我们希望事物能够为我们提供以下形式的有效数值表达式
\n\n时间1+时间2+...
\n\n所以,
\n\nmp3info -o \'%S + \'\nRun Code Online (Sandbox Code Playgroud)\n\n看起来很明智。
\n\n然后,因为 mp3info 打印的最后一个内容将是 a +,所以让我们添加一个零:
"$(mp3info -o \'%S + \') 0"\nRun Code Online (Sandbox Code Playgroud)\n\n并在算术表达式中使用该字符串:
\n\ntotal_seconds=$(( $(mp3info -o \'%S + \' *.mp3) 0 ))\nRun Code Online (Sandbox Code Playgroud)\n\n现在,获取完整的会议记录:
\n\nfull_minutes=$(( total_seconds / 60 ))\nRun Code Online (Sandbox Code Playgroud)\n\n以及剩余的秒数
\n\nseconds=$(( total_seconds % 60 ))\nRun Code Online (Sandbox Code Playgroud)\n\n所以总脚本看起来像
\n\n#!/bin/bash \n# This code is under GPLv2\n# Author: Marcus M\xc3\xbcller\n\ntotal_seconds=$(( $(mp3info -o \'%S + \' *.mp3) 0 ))\n\nprintf "%02d:%02d\\n" $((total_seconds / 60)) $((total_seconds % 60))\nRun Code Online (Sandbox Code Playgroud)\n