использование команды mdls для создания отчета по метаданным

Все,
У меня есть сценарий оболочки, который просматривает все медиафайлы (аудио, видео) в папке, предоставленной пользователем, и создает хороший текстовый отчет с метаданными. Я использую Mac OS X и использую команду Spotlight mdls для получения всех соответствующих метаданных. Проблема в том, что иногда я вижу «нулевые» результаты в своем отчете для всех медиафайлов. Если я снова запущу скрипт, он, похоже, сработает. Я в замешательстве, почему это происходит. Это часть скрипта, который выводит отчет метаданных:

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 \*.mp3 -o -iname \*.m4r -o -iname \*.m4a \)  -print0 )

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

Ожидаемый результат выглядит следующим образом:

1) [./test1.mov]
– Продолжительность: 22.03
– Размеры: 480 X 640 пикселей
– Кодек: ("H.264")

2) [./test2.mov]
– Продолжительность: 25.03
– Размеры: 480 X 640 пикселей
– Кодек: ("H.264")

Но иногда вывод нулевой для всех медиафайлов:

1) [./test1.mov]
– Продолжительность: null
– Размеры: null X null пикселей
– Кодек: ( null )

2) [./test2.mov]
– Продолжительность: null
– Размеры: null X null пикселей
– Кодек: ( null )

Я пропустил трюк здесь? Почему скрипт иногда работает, а иногда выводит ноль?


person smokinguns    schedule 06.04.2012    source источник


Ответы (1)


Проблема заключалась в том, что Spotlight не индексировал файлы. Я использовал команду mdimport, чтобы заставить Spotlight индексировать папку, и это решило проблему.

person smokinguns    schedule 19.04.2012
comment
например используйте mdimport -r PLUGIN, чтобы заставить Spotlight переиндексировать все файлы с определенным плагином (получите список плагинов с помощью mdimport -L) - person Jay; 01.10.2012