
У меня было несколько задач, где мне нужно было сделать отчеты об изменениях файлов в каталогах с разных серверов, и мне удалось сделать отчеты с помощью простых команд 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