Bash:无法通过 mediainfo 浏览目录中的所有文件
Posted
技术标签:
【中文标题】Bash:无法通过 mediainfo 浏览目录中的所有文件【英文标题】:Bash: Failure to go through all files in a directory with mediainfo 【发布时间】:2016-08-28 04:29:23 【问题描述】:我在 debian 计算机上有一个音乐目录,其中有时会包含太大的文件。为了帮助我最终删除这些文件,我安装了 mediainfo 并制作了一个脚本,该脚本应该使用该命令遍历音乐目录中的所有文件。
我正在尝试利用持续时间参数来定义需要删除的内容。示例输入是:
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 回显输出不显示任何内容。但是当我将第一个回显输出复制到第一个示例时,它显示相同的输出。
但是,如果目录中有任何文件名中没有空格的媒体,则脚本可以正常工作。脚本的输出:
/home/administrator/music/546721638279.mp3
83017
这个问题让我很困惑。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:你应该更新这一行:
mediadur=$(mediainfo --Inform="General;%Duration%" "$i");
双引号会阻止globbing and word splitting
【讨论】:
【参考方案2】:其实这和 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
也适用于带有空格的文件名。
【讨论】:
以上是关于Bash:无法通过 mediainfo 浏览目录中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 MediaInfo 命令行和 jq 从文件目录构建有效的 JSON 播放列表
安装暴风影音时出现“抽取:无法写入文件mediaInfo2.dll”的提示应该怎样解决?!!救急@重赏!