OS X mdls 命令在输出中给出“null”

OS X mdls 命令在输出中给出“null”

我有使用基于 Mac 的 bash 脚本分布式文件系统命令在 shell 脚本中生成媒体文件的元数据报告。脚本运行时,输出如下所示:

1) [./test1.mov]  
- Duration: 22.03  
- Dimensions: 480 X 640 pixels   
- Codec: ( "H.264" )  

有时报告中的所有文件的结果都为空:

1) [./test1.mov]   
- Duration: (null)   
- Dimensions: (null) X (null) pixels  
- Codec: ( null )     

以下是生成报告的脚本:

cd "path_to_folder"
while IFS= read -r -d $'\0' file; do
  duration=`mdls -name kMDItemDurationSeconds "$file" | cut -d "=" -f 2 `
  duration=`printf "%.2f" $duration;`
  pixel_height=`mdls -name kMDItemPixelHeight "$file" | cut -d "=" -f 2`
  pixel_width=`mdls -name kMDItemPixelWidth "$file" | cut -d "=" -f 2`
  codec=`mdls -name kMDItemCodecs "$file" | cut -d "=" -f 2`
  temp="$i) [$file]\n- Duration: $duration\n- Dimensions: $pixel_width X $pixel_height    pixels\n- Codec: $codec\n"
  metaDataOutput=$metaDataOutput"\n"$temp
  i=$((i + 1))
done < <(find .  \( -iname \*.m4v -o -iname \*.mov -o -iname \*.m4r -o -iname \*.m4a \)  -print0 )

 echo -e  "\n[Report]\n"$metaDataOutput 

知道我可能做错了什么吗?为什么是空值?

答案1

也许该文件被排除在 Spotlight 索引之外?或者它可能位于不支持 Spotlight 索引的硬盘或网络共享上?

如果以上情况都不是,听起来您的 Spotlight 数据库有问题。Spotlight 中有一些极其复杂的优化,以将其对性能的影响降至最低,但有时它会出现问题。

您可以使用它mdutil来查找驱动器聚光灯数据库的状态(/Volumes/other_disk如果您不想将它们应用到启动盘,请使用):

sudo mdutil -s /

您可以通过运行以下命令删除/刷新特定磁盘上的数据库:

sudo mdutil -E /

Spotlight 会在需要时重建索引(可能是在您的系统空闲时)。您可以使用以下命令立即重新索引:

sudo mdutil -i on /

根据您系统上的文件数量,重建索引可能需要几个小时。您可以在 GUI 的聚光灯搜索图标中跟踪进度。

请参阅man mdutil以了解更多信息。

相关内容