Список файлов PDF с отсутствующими метаданными

Список файлов PDF с отсутствующими метаданными

У меня было несколько задач, где мне нужно было сделать отчеты об изменениях файлов в каталогах с разных серверов, и мне удалось сделать отчеты с помощью простых команд Unix. Я использовал:

ls -R -lT /Volumes/www/subdir/ | awk '{if ($7=="" ) print $0; else print $11";"$7"/"$8"/"$10;}' > /Users/[username]/Desktop/output.txt 

Теперь мне нужно сделать отчет по всем файлам PDF, в которых отсутствуют метаданные. Мне было интересно, есть ли способ (похожий на мой текущий метод) проверить метаданные файла и вывести только те, в которых отсутствуют метаданные. Я хочу передать результаты ls в файл, чтобы можно было импортировать данные в Excel. В других моих отчетах я использовал awk для форматирования вывода ls, чтобы его можно было импортировать в Excel.

Эту операцию я буду выполнять на Mac и предпочту использовать встроенные команды вместо установки, поскольку у меня нет прав администратора для установки программного обеспечения на офисное оборудование.

Обновлять: Этот отчет будет изменен, чтобы не только сообщать о PDF-файлах, но я предвижу необходимость сообщать о других типах файлов в будущем. Таким образом, отчет может искать один или несколько типов файлов.

Метаданные, которые мне нужно проверить прямо сейчас:

  • заголовок
  • автор
  • предмет
  • ключевые слова

Мне удалось вывести список метаданных файлов с помощью:

mdls [path to file]

Это приводит к списку всех метаданных. Я протестировал его с pdf с заполненными метаданными и с одним без заполненных метаданных. Я заметил, что с отсутствующими метаданными он не возвращает null, а скорее вообще не перечисляет метаключ.

В настоящее время я пробую следующее:

mdfind -onlyin /Volumes/web/ "kMDItemAuthors == ''"

Как я могу использовать эти данные для фильтрации выходных данныхls

Обновлять: Мне удалось получить отчет, содержащий список всех PDF-файлов, используя следующее:

ls -R -lT [server directory path] | grep ".[file extension]" | awk '{print $11";"$7"/"$8"/"$10;}' > [output file path] 

Одним из побочных эффектов этого является то, что я теряю рекурсивное свойство из ls. Все еще работаю над этим.

Мне также нужно найти способ отфильтровать только те, в которых отсутствуют требуемые метаданные. Мне также посоветовали сделать отчет о PDF-файлах, в которых также есть все метаданные. Я пробовал использовать эту текущую команду и перенаправлять вывод сначала в mdfind, а затем в awk, но, должно быть, я что-то упускаю.

решение1

Использоватьexiftool.

Чтобы рекурсивно ( ) вывести полный путь ( -T -FilePath) ко всем файлам с расширением, в которых какие-либо из указанных вами метаданных пусты, используйте:pdf-r/search/path

exiftool -T -FilePath \
         -if '$FileTypeExtension eq "pdf"' \
         -if '(not $Title) or (not $Author) or (not $Subject) or (not $Keywords)' \
         -r /search/path

Настройте команду в соответствии с вашими будущими потребностями.

решение2

Если вам нужно что-то более общее, вам придется создать какую-то программу/скрипт для проверки одного файла и find(1)запускать ее по очереди на каждой цели, например:

find . -name "*.pdf" -exec check \;

где вы убедитесь, что check fileвсегда возвращает успех (0) и печатает имя файла-нарушителя соответствующим образом. Или подправьте вышеописанное так, чтобы просто возвращать успех, если файл поврежден, и перейдите:

find . -name "*.pdf" -exec check \; -print

Связанный контент