从包含大量 pdf 的 zip 文件中提取特定的 pdf

从包含大量 pdf 的 zip 文件中提取特定的 pdf

鉴于:

  • Zip 文件的名称和位置。示例:collectionOfPdfFiles2017.zip
    • Zip 文件是没有文件夹结构的 PDF 集合
  • Zip 文件中的 PDF 文件的名称。示例:someFileFrom2017.pdf

通缉:

  • 从给定的 zip 文件中提取指定 PDF 的控制台方式
  • 该文件应该未经修改。
    • 基本上,提取的文件应与我通过提取整个档案并手动复制所需文件所获得的文件处于相同的状态。
  • 理想情况下是放入目标文件夹。但那太奢侈了。

我该怎么做?目前我有一个脚本,它将在 ZIP 中的 PDF 文件中搜索字符串,并打印出 zip 的名称和其中的 pdf。我将发布此内容以确保信息安全:

    #!/bin/bash
    echo "Hi I'll find text in pdf files that are stored inside zip files."
    echo ""
    echo "Enter search string:"
    read searchString

    echo "Ok. I'll search all zip files for content with this text..."

    for z in *.zip
    do
    zipinfo -1 "$z" |  # Get the list of filenames in the zip file
        while IFS= read -r f
        do
        unzip -p "$z" "$f" | # Extract each PDF to standard output instead of a file
            pdftotext - - | # Then convert it to text, reading from stdin, writing to stdout
            grep -q $searchString && echo "$z -> $f" # And finally grep the text
        done
    done 

此脚本的创建归功于这个答案

答案1

从 zip 档案中解压特定文件

unzip -j "myarchive.zip" "in/archive/file.pdf" -d "/destination/path/"

在你的脚本中

# Set a destination path
dest="/path/to/unzip/to"
# dump pdf to temp text file
tempfile=$(mktemp)
# unzip the file to stdOut and convert it to text
unzip -p "$z" "$f" | pdftotext - $tempfile
if grep -q $searchString $tempfile; then
    unzip -j "$z" "$f" -d "$dest"
    # some text output
    echo "$z -> $f"
fi
rm $tempfile

相关内容