0

我正在努力实现以下目标:

我有一个包含多个视频文件的目录,我想列出所有文件并在同一行中添加文件的持续时间和大小,使用 mediainfo(没有其他可用)。

Mediainfo 的输出类似于:

General
Format      : 
File Size   : 335 MiB
Duration    : 28mn 24s

我想在文件中获取以下数据:
文件名:335 MiB:28mn 24s
所以我可以检查文件是否有重复...

因此我有以下脚本:

#!/bin/bash
         for i in $( ls /mnt/storage/kids/* ); do
                     echo -n item: $i ":"
                     mediainfo $i |grep -A 1 "File size"
                     done

使用 echo n 我在 item 的同一行中得到以下行: $i 和使用 grep -A 1 我得到文件大小和持续时间,但持续时间进入第二行而不是与文件名和文件大小相同。
我还想摆脱文件名和持续时间标题。

任何的想法?

4

2 回答 2

2

要摆脱双线,请将您的代码更改为:

echo -n item: $i ":" $(mediainfo $i |grep -A 1 "File size")

要摆脱标题,您可以使用 awk:

$ echo -e 'Filename : BOO\nSize : BAA' | awk -F: '{print $2}'
 BOO
 BAA
于 2012-06-26T11:34:43.600 回答
0
  • 不要使用for i in $(ls),这是错误的。如果你想循环文件for i in /mnt/storage/kids/*直接使用。
  • 避免echo -n支持printf,它是可移植的。

试试这个:

for i in /mnt/storage/kids/* ; do
    printf 'item: %s: ' "$i"
    mediainfo "$i" | sed -e '/File Size/,/Duration/{s/.*: //p;};d' | sed -e '$!N;s/\n/: /'
done
于 2012-06-26T11:41:57.607 回答