Bash,在所有 pdf 文件中搜索



我想要一个脚本,可以在我所有的pdf文件中找到我想要的一切。所以我写了这个

#!/bin/bash
for file in */*.pdf; do
printf "$filen"
echo "--------------------------------------------"
pdftotext $file - | grep -i "$1"
echo "--------------------------------------------"
printf "nn"
done

但是也存在一些问题。首先,我只想看到那些 grep 在其中找到某些内容的文件,我还注意到 PdfToText 在遇到带有空格的文件名时会抛出帮助消息

这里有很多问题。

  • 如果文件名包含百分号,脚本将引发错误,因为printf "$file"会将其第一个参数解释为格式。 请改用printf '%s' "$file"
  • 运行 pdftotext 时您没有引用 filename 参数,这可能就是它抛出帮助消息的原因——pdftext foo bar.pdf -看起来像两个参数,而不是一个文件名。 pdftotext "$file"。(通常,始终在 bash 中引用您的变量。
  • 如果只想显示匹配文件的输出,则需要在打印文件名之前计算条件。

我不知道pdftotext的行为方式如何,但假设它不会产生一堆 stderr,以下方法可能会起作用:

#!/usr/bin/env bash
line=$(printf '%032s' 0); line=${line//0/-}
for file in */*.pdf; do
  output="$(pdftotext "$file" - | grep -i "$1")"
  if [ -n "$output" ]; then
    printf "%sn$linen%sn$linenn" "$file" "$output"
  fi
done

注意:我还没有测试过这个。如果此格式看起来复杂或迟钝,则可能需要使用$line引用展开printf以提高可读性。

相关内容

  • 没有找到相关文章

最新更新