
Tuve algunas tareas en las que necesitaba generar informes sobre cambios de archivos en directorios de diferentes servidores y logré generar informes usando comandos simples de Unix. Solía:
ls -R -lT /Volumes/www/subdir/ | awk '{if ($7=="" ) print $0; else print $11";"$7"/"$8"/"$10;}' > /Users/[username]/Desktop/output.txt
Ahora necesito hacer un informe de todos los archivos PDF a los que les faltan metadatos. Me preguntaba si hay una manera (muy parecida a mi método actual) de verificar los metadatos de un archivo y generar solo aquellos a los que les faltan metadatos. Quiero canalizar los resultados de ls a un archivo para poder importar los datos a Excel. En mis otros informes utilicé awk para formatear la salida de ls para poder importarla a Excel.
Esta operación se realizará en una Mac y prefiero usar comandos integrados en lugar de instalar, ya que no tengo derechos de administrador para instalar software en hardware de oficina.
Actualizar: Este informe se modificará no solo para informar sobre archivos PDF, sino que preveo tener que informar sobre otros tipos de archivos en el futuro. Por lo tanto, un informe puede buscar uno o varios tipos de archivos.
Los metadatos que necesito verificar ahora mismo son:
- título
- autor
- sujeto
- palabras clave
Me las arreglé para enumerar los metadatos de un archivo usando:
mdls [path to file]
Esto da como resultado una lista de todos los metadatos. Lo probé con un pdf con el meta completado y otro sin el meta completado. Me di cuenta de que con los metadatos faltantes no devuelve un valor nulo sino que no incluye la clave meta en absoluto.
Algo que estoy intentando actualmente es:
mdfind -onlyin /Volumes/web/ "kMDItemAuthors == ''"
¿Cómo podría usar estos datos para filtrar la salida dels
Actualizar: Logré obtener un informe que enumera todos los archivos PDF, usando lo siguiente:
ls -R -lT [server directory path] | grep ".[file extension]" | awk '{print $11";"$7"/"$8"/"$10;}' > [output file path]
Uno de los efectos secundarios de esto es que estoy perdiendo la propiedad recursiva de ls. Todavía estoy trabajando en esto.
También necesito encontrar una manera de filtrar solo aquellos a los que les faltan los metadatos requeridos. También me informaron que también necesito hacer un informe de los archivos PDF que tienen todos los metadatos. Intenté usar este comando actual y canalizar la salida a mdfind primero y luego a awk, pero me debe faltar algo.
Respuesta1
Usarexiftool.
Para imprimir la ruta completa ( -T -FilePath
) a todos los archivos con extensión pdf
recursiva ( -r
) /search/path
que tienen alguno de los metadatos especificados vacíos, use:
exiftool -T -FilePath \
-if '$FileTypeExtension eq "pdf"' \
-if '(not $Title) or (not $Author) or (not $Subject) or (not $Keywords)' \
-r /search/path
Personalice el comando para adaptarlo a sus necesidades futuras.
Respuesta2
Si desea algo más genérico, tendrá que crear algún programa/script para realizar la verificación de un archivo y usarlo find(1)
para ejecutarlo en cada destino por turno, algo como:
find . -name "*.pdf" -exec check \;
donde se asegura de que check file
siempre devuelva éxito (0) e imprima el nombre del archivo infractor según corresponda. O modifique lo anterior para devolver el éxito si el archivo no funciona y vaya:
find . -name "*.pdf" -exec check \; -print