Pregunta ¿Cómo puedo identificar recursivamente archivos PDF que no se pueden buscar y copiarlos en una carpeta?


Aún más a una publicación anterior que proporcionó una solución de script:

A partir de mi pregunta, es posible decir que soy un usuario de computadora y que no tengo conocimientos de programación.

Tengo cientos de archivos PDF que se pueden buscar y buscar en varias carpetas y subcarpetas en un disco duro externo.

Tengo computadoras con Windows 7 y Ubuntu 14.04

¿Cómo podría modificar esta secuencia de comandos para especificar la carpeta principal y también buscar subcarpetas, y luego generar un informe que identifique los nombres y ubicaciones de los archivos?

Si los deseos se hicieran realidad, esto estaría contenido en una GUI y copiaría los archivos sin texto en una carpeta común desde donde Abbyy Pro podría combinar OCR.


1


origen




Respuestas:


Probablemente debiste haber publicado esto como un comentario sobre la otra pregunta, pero, nuevamente, hubieras necesitado más reputación para hacerlo.

El guión de @ davidgo ya es recursivo (irá a través de carpetas y subcarpetas). Solo tendrías que modificar echo "$each NOT searchable" para cambiar lo que hace al encontrar un archivo que no se puede buscar. Esto debería funcionar:


Editar: Hubo algunos problemas con la forma en que el script manejaba espacios en nombres de archivos y algunos otros problemas aquí y allá. Decidí revisar el guión original de davidgo para que veas algunos cambios más que los que mencioné anteriormente.


#! /bin/bash

if [[ ! "$#" = "2" ]]
  then
      echo "Usage: $0 /path/to/PDFDirectory /path/to/TARGETDirectory"
      exit 1
fi

PDFDIRECTORY="$1"
TARGETDIR="$2"

while IFS= read -r -d $'\0' FILE; do
    PDFFONTS_OUT="$(pdffonts "$FILE" 2>/dev/null)"
    RET_PDFFONTS="$?"
    FONTS="$(( $(echo "$PDFFONTS_OUT" | wc -l) - 2 ))"
    if [[ ! "$RET_PDFFONTS" = "0" ]]
      then
          READ_ERROR=1
          echo "Error while reading $FILE. Skipping..."
          continue
    fi
    if [[ "$FONTS" = "0" ]]
      then
          echo "NOT SEARCHABLE: $FILE -- Copying to $TARGETDIR."
          cp -v "$FILE" "$TARGETDIR/${FILE##*/}"
      else
          echo "SEARCHABLE: $FILE"
      fi
done < <(find "$PDFDIRECTORY" -type f -name '*.pdf' -print0)

echo "Done."
if [[ "$READ_ERROR" = "1" ]]
  then
      echo "There were some errors."
fi

Guarde este script en un nuevo archivo vacío, asígnele un nombre parecido copy_image_pdf y hazlo ejecutable a través de las propiedades del archivo (supongo que harías esto en Ubuntu).

Luego ejecútelo desde un terminal mientras proporciona el directorio PDF y el directorio de destino donde se deben copiar los archivos de imagen PDF, por ejemplo:

copy_image_pdf /media/data/pdffiles /media/data/pdffiles-to-be-ocred

0