我在网上找到了以下命令来搜索pdf中的文本
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
我想通过脚本来自动执行此操作,因此我在脚本文件 search_pdf.sh 中编写了此操作
#!/bin/bash
echo $1
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"' \;
该脚本存在一些错误,它没有按预期工作。任何人都可以帮助我吗
答案1
尝试导出$1
脚本中的 。
#!/usr/bin/env bash
pattern=$1
export pattern
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$pattern"' \;
但我建议将其重写为
#!/usr/bin/env bash
pattern=$1
export pattern
find . -name '*.pdf' -exec sh -c 'for f; do
pdftotext "$f" - | grep --with-filename --color "$pattern"
done' _ {} +
也许添加--label=$pattern
也
答案2
您需要将参数$0
作为错误消息的 shell 名称和位置参数传递$1
给sh -c '...'
调用:
#!/bin/bash
find . -name '*.pdf' -exec sh -c '
pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"
' sh "$1" \;
此处,sh
用作$0
(可以是任何名称),原始参数"$1"
作为位置参数传递$1
。
如果您已pdfgrep
安装,则不需要 pdf 到文本转换和额外的 shell:
find . -name '*.pdf' -exec pdfgrep -H "$1" {} \;