Bash:无法浏览带有mediainfo的目录中的所有文件

时间:2016-05-03 08:09:16

标签: bash mediainfo

我在debian电脑上有一个音乐目录,它不时会有太大的文件。为了帮助我最终删除这些文件,我已经安装了mediainfo并制作了一个脚本,该脚本应该使用该命令浏览音乐目录中的所有文件。

我试图利用duration参数来定义需要删除的内容。示例输入是:

mediainfo --Inform="General;%Duration%" /home/administrator/music/Example\ Full\ OST.mp4
7838987

输出以毫秒为单位返回持续时间。请注意,如果文件中包含任何空格,则mediainfo会在它们前面标记反斜杠。我在我的剧本中考虑到了这一点:

#!/bin/bash
for i in /home/administrator/music/*
do
# Changing i to readable form for mediainfo
i=$(echo $i | sed -r 's/[ ^]+/\\&/g')
echo $i
# Go Through files, storing the output to mediadur variable
mediadur=$(mediainfo --Inform="General;%Duration%" $i);
echo $mediadur;
done

回声输出是:

/home/administrator/music/Example\ Full\ OST.mp4
 

mediadur echo输出不显示任何内容。但是当我将第一个echo输出复制到第一个示例时,它显示相同的输出。

但是,如果目录中有任何媒体在其文件名中没有空格,则脚本可以正常工作。脚本的输出:

/home/administrator/music/546721638279.mp3
83017

这个问题让我很困惑。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

你应该更新这一行:

mediadur=$(mediainfo --Inform="General;%Duration%" "$i");

双引号会阻止globbing and word splitting

答案 1 :(得分:1)

实际上这与MediaInfo无关,只是您向命令行提供了错误的文件名。 MediaInfo没有在他们面前添加“反斜杠”。

您的转义方法无法按预期工作。

#!/bin/bash
for i in music/*
do
    # Go Through files, storing the output to mediadur variable
    mediadur=$(mediainfo --Inform="General;%Duration%" "$i");
    echo $mediadur;
done

也适用于包含空格的文件名。