首页 > 解决方案 > 如何在 bash 脚本的输入中给出由正则表达式表示的文件列表

问题描述

我正在创建一个用于bib从科学论文中自动提取记录的代码。

在旧版本的脚本中,我输入了存储所有 pdf 的文件夹的名称,现在我想给出一个正则表达式。比如之前:

./AutoBib.sh Papers/

现在:

./Autobib.sh Papers/*.pdf

例如,在文件夹中有 3 个 pdf 文件:Shrek.pdf、Fiona.pdf、Donkey.pdf,使用我的脚本我应该能够从所有文件中检索 doi,创建一个列出所有 doi 的文件但执行我的脚本它返回第一个文件的 doi,仅此而已。

这是我的代码:

for i in $1; do
    doi $i
done

doi是一个从 pdf 中提取 doi 并将其放入 txt 文件的函数。当我运行脚本时,它只返回第一个文件的 doi。

如何在我的脚本中提供正则表达式并能够遍历与该正则表达式匹配的所有文件?

标签: linuxbash

解决方案


重要的是要了解这Papers/*.pdf不是正则表达式,而是导致bash执行文件名扩展或通配符的通配符模式。

$1表示脚本的第一个参数,因此您的for循环只会遍历该一个参数。

用于$@表示所有参数:

for i in "$@"; do
    doi "$i"
done

推荐阅读