Bash, 搜索所有pdf文件
Bash, searching in all pdf files
我想要一个脚本,它可以在我所有的 pdf 文件中找到我想要的一切。所以我写了这个
#!/bin/bash
for file in */*.pdf; do
printf "$file\n"
echo "--------------------------------------------"
pdftotext $file - | grep -i ""
echo "--------------------------------------------"
printf "\n\n"
done
但是也有一些问题。首先,我只想查看 grep 在其中找到内容的那些文件,我还注意到 PdfToText 在遇到带有空格的文件名时会抛出帮助消息
这里有很多问题。
- 如果文件名包含百分号,您的脚本将出现错误,因为
printf "$file"
会将其第一个参数解释为一种格式。请改用 printf '%s' "$file"
。
- 您在 运行
pdftotext
时没有引用文件名参数,这可能是它抛出帮助消息的原因 -- 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 "")"
if [ -n "$output" ]; then
printf "%s\n$line\n%s\n$line\n\n" "$file" "$output"
fi
done
注意:我还没有测试过这个。如果此格式显得复杂或晦涩,您可能希望使用 $line
引用扩展 printf
以提高可读性。
我想要一个脚本,它可以在我所有的 pdf 文件中找到我想要的一切。所以我写了这个
#!/bin/bash
for file in */*.pdf; do
printf "$file\n"
echo "--------------------------------------------"
pdftotext $file - | grep -i ""
echo "--------------------------------------------"
printf "\n\n"
done
但是也有一些问题。首先,我只想查看 grep 在其中找到内容的那些文件,我还注意到 PdfToText 在遇到带有空格的文件名时会抛出帮助消息
这里有很多问题。
- 如果文件名包含百分号,您的脚本将出现错误,因为
printf "$file"
会将其第一个参数解释为一种格式。请改用printf '%s' "$file"
。 - 您在 运行
pdftotext
时没有引用文件名参数,这可能是它抛出帮助消息的原因 --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 "")"
if [ -n "$output" ]; then
printf "%s\n$line\n%s\n$line\n\n" "$file" "$output"
fi
done
注意:我还没有测试过这个。如果此格式显得复杂或晦涩,您可能希望使用 $line
引用扩展 printf
以提高可读性。