linux - 将查找命令转换为函数以便在 PDF 文件中搜索

标签 linux bash shell

我有以下命令取自 here

  find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

我想把它变成一个类似

的函数
  pdf_search() { find ./ -name '*.pdf' -exec sh -c 'pdftotext "$1" - | grep --with-filename --label="{}" --color "$@"' \; ; }

虽然我不确定该怎么做,我只是想能够传递一个参数 到使用它的功能,例如

  pdf_search 'look for this'

使用命令为

pdf_search() { 
  find ./ -name '*.pdf' -exec sh -c 'pdftotext "$1" - | grep --with-filename --label="{}" --color "$1"' \; ; 
}

给出以下错误-

I/O Error: Couldn't open file '': No such file or directory.

最佳答案

您将参数传递给函数的语法是正确的(参见 details )。但问题在于单引号内的 $1 变量的扩展。请阅读接受的答案 here

因此,在修复单引号问题后,您的代码可能如下所示:

pdf_search() {
    find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"' -- "$1" \;
}

pdf_search "your text"

关于linux - 将查找命令转换为函数以便在 PDF 文件中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426075/

相关文章:

java - Play Framework - JBoss channel 异常

linux - 为什么 Docker -u 在我的服务器上不起作用?

bash - 删除bash中某一行之后的所有内容

java - 如何使用java从Json文件导入数据到Mongodb

linux - 为什么 "yes yes | ssh hostname"不能自动对主机 key 身份验证回答是?

c - 用 C 中以秒为单位的时钟测量执行时间不起作用

linux - 那个命令是什么?导出路径=~/.local/bin :$PATH

linux - cp 前导零

Perl 单行单引号

linux - 从 docker 容器在主机上创建/触摸文件