Listar arquivos PDF com metadados ausentes

2

Eu tive algumas tarefas em que precisei fazer relatórios sobre alterações de arquivos em diretórios de servidores diferentes e consegui fazer os relatórios usando comandos Unix simples. Eu usei:

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

Agora preciso fazer um relatório de todos os arquivos PDF com metadados ausentes. Eu queria saber se existe uma maneira (muito parecida com o meu método atual) para verificar os metadados de um arquivo e produzir apenas aqueles com metadados ausentes. Eu quero canalizar os resultados ls para um arquivo para que eu possa importar os dados para exel. Nos meus outros relatórios usei o awk para formatar a saída ls para que ela pudesse ser importada para o exel.

Esta operação será feita em um Mac e prefere usar comandos internos durante a instalação, pois não tenho direitos de administrador para instalar software em hardware de escritório.

Atualização: Este relatório será modificado para não apenas relatar em PDFs, mas eu prevejo ter que relatar outros tipos de arquivos no futuro. Assim, um relatório pode pesquisar um ou vários tipos de arquivo.

Os metadados que preciso verificar agora são:

  • título
  • autor
  • assunto
  • palavras-chave

Eu consegui listar os metadados dos arquivos usando:

mdls [path to file]

Isso resulta em uma lista de todos os metadados. Eu testei com um pdf com meta preenchida e outra sem meta preenchida. Eu notei que com os metadados ausentes, não está retornando null, mas não listando a chave mata.

Algo que estou tentando atualmente é:

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

Como eu poderia usar esses dados para filtrar a saída de ls

Atualização: Consegui obter um relatório que lista todos os pdfs, usando o seguinte:

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

Um dos efeitos colaterais disso é que estou perdendo a propriedade recursiva do ls. Ainda trabalhando nisso.

Também preciso encontrar uma maneira de filtrar apenas os que não possuem os metadados necessários. Também fui aconselhado a também fazer um relatório dos PDFs que possuem todos os metadados também. Eu tentei usar este comando atual e canalizar a saída para mdfind primeiro depois para awk, mas devo estar faltando alguma coisa.

    
por Patrick W. McMahon 17.02.2016 / 18:28

2 respostas

2

Use exiftool .

Para imprimir o caminho completo ( -T -FilePath ) para todos os arquivos com extensão pdf recursivamente ( -r ) em /search/path com um dos metadados especificados vazios, use:

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

Personalize o comando para atender às suas necessidades futuras.

    
por 17.02.2016 / 23:11
0

Se você quiser algo mais genérico, precisará criar algum programa / script para fazer a verificação de um arquivo e usar find(1) para executá-lo em cada destino, algo como:

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

onde você garante que check file sempre retorne sucesso (0) e imprime o nome do arquivo incorreto conforme apropriado. Ou ajuste o acima para apenas retornar sucesso se o arquivo estiver quebrado e vá em:

find . -name "*.pdf" -exec check \; -print
    
por 24.02.2016 / 18:05

Tags