
Tive algumas tarefas em que precisei fazer relatórios sobre alterações de arquivos em diretórios de diferentes servidores e consegui fazer os relatórios usando comandos simples do Unix. 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 que estão faltando metadados. Eu queria saber se existe uma maneira (muito parecida com o meu método atual) de verificar os metadados de um arquivo e gerar apenas aqueles com metadados ausentes. Quero canalizar os resultados do ls para um arquivo para que possa importar os dados para o Excel. Em meus outros relatórios, usei o awk para formatar a saída ls para que pudesse ser importada para o Excel.
Esta operação será feita em um Mac e prefiro usar comandos integrados em vez de instalar, pois não tenho direitos de administrador para instalar software em hardware de escritório.
Atualizar: Este relatório será modificado não apenas para relatar PDFs, mas prevejo ter que relatar outros tipos de arquivo no futuro. Portanto, 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
Consegui listar metadados de arquivos usando:
mdls [path to file]
Isso resulta em uma lista de todos os metadados. Testei com um pdf com meta preenchido e outro sem meta preenchido. Percebi que com os metadados ausentes ele não está retornando nulo, mas não listando a meta-chave.
Algo que estou tentando atualmente é:
mdfind -onlyin /Volumes/web/ "kMDItemAuthors == ''"
Como eu poderia usar esses dados para filtrar a saída dels
Atualizar: 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 estou trabalhando nisso.
Também preciso encontrar uma maneira de filtrar apenas aqueles que não possuem os metadados necessários. Também fui informado de que preciso fazer um relatório dos PDFs que contêm todos os metadados. Eu tentei usar este comando atual e canalizar a saída para mdfind primeiro e depois para awk, mas devo estar faltando alguma coisa.
Responder1
Usarexiftool.
Para imprimir o caminho completo ( -T -FilePath
) para todos os arquivos com extensão pdf
recursiva ( -r
) /search/path
que possuem 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.
Responder2
Se você quiser algo mais genérico, terá que criar algum programa/script para fazer a verificação de um arquivo e usá-lo 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 imprima o nome do arquivo incorreto conforme apropriado. Ou ajuste o acima para retornar apenas sucesso se o arquivo estiver quebrado e vá:
find . -name "*.pdf" -exec check \; -print