我如何递归识别不可搜索的 PDF 并将其复制到文件夹?

我如何递归识别不可搜索的 PDF 并将其复制到文件夹?

进一步先前的帖子提供了一个脚本解决方案:

从我的问题中可能可以看出我是一名计算机用户,没有编程知识。

我在外部硬盘上的各个文件夹和子文件夹中有数百个可搜索和不可搜索的 pdf。

我有运行 Windows 7 和 Ubuntu 14.04 的计算机

我如何修改此脚本以指定父文件夹并搜索子文件夹,然后生成标识文件名和位置的报告?

如果愿望成真,那么这将包含在 GUI 中,并将无文本文件复制到 Abbyy Pro 可以从中批量进行 OCR 的公共文件夹中。

答案1

您可能应该将此作为对另一个问题的评论发布,但是 - 再次 - 您需要更多的声誉才能做到这一点。

@davidgo 的脚本已经是递归的(它将遍历文件夹和子文件夹)。您只需修改它echo "$each NOT searchable"以更改它在找到不可搜索的文件时所做的事情。这应该可以解决问题:


编辑:脚本处理文件名中的空格时存在一些问题,并且还存在一些其他问题。我决定彻底修改 davidgo 的原始脚本,因此您会看到比我上面提到的更多的更改。


#! /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

将此脚本保存在一个新的空文件中,将其命名为类似的名称copy_image_pdf,并通过文件属性使其可执行(我假设您在 Ubuntu 上执行此操作)。

然后从终端运行它,同时提供 PDF 目录和应该复制图像 PDF 文件的目标目录,例如:

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

相关内容