我想要一个脚本,可以在我的所有pdf文件中找到我想要的东西。所以我写了这个
#!/bin/bash
for file in */*.pdf; do
printf "$file\n"
echo "--------------------------------------------"
pdftotext $file - | grep -i "$1"
echo "--------------------------------------------"
printf "\n\n"
done
但是有一些问题。首先,我希望只看到那些grep找到内容的文件,同时我注意到PdfToText遇到带有空格的文件名时会抛出帮助信息
答案 0 :(得分:2)
这里有很多问题。
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 "%s\n$line\n%s\n$line\n\n" "$file" "$output"
fi
done
注意:我没有测试过这个。如果此格式显得复杂或钝,您可能希望使用printf
引用扩展$line
以提高可读性。