使用bash生成页面列表

时间:2016-10-10 19:20:46

标签: bash

我有一个名为mydir的目录,其中包含以下文件:

_Sidebar.md
Jack.md
Amy.md
Robert.md
(Jack) blah blah.md
(Jack) foo bar.md
(Amy) etc etc etc.md
...

_Sidebar.md文件包含我所关注的所有名称的列表,如下所示:

* [[Jack]]
* [[Amy]]
* [[Robert]]

这个想法是:获取_Sidebar.md的内容,获取名称列表,循环遍历每个名​​称:

  • 查找名称以(THATNAME)
  • 开头的所有文件
  • 将这些文件的名称保存在THATNAME.md

所以最后,Jack.md会这样读:

(Jack) blah blah.md
(Jack) foo bar.md

我想用bash脚本做到这一点!

这是我到目前为止的代码:

prefixes=($( cat mydir/_Sidebar.md | grep -oP '(?<=\[\[).+(?=\]\])' ))

length=${#prefixes[@]}

for ((i = 0; i != length; i++)); do
  echo "Prefix $i: '${prefixes[i]}'"
  pref=${prefixes[i]}
  pages=$( eval "ls 'mydir/\(*'" )
  echo "$pages"
done

$prefixes数组正确识别名称。其中带有ls命令的行现在不完整;作为一个开始,我希望它给我所有以(开头的文件,但我得到一条错误消息:

ls: cannot access mydir/\(*: No such file or directory

但是当我运行命令ls mydir/\(*时,我确实得到了正确的结果。在使用动态参数调用ls命令时,我在做错了什么?

1 个答案:

答案 0 :(得分:1)

要访问带括号的页面列表:

pages=( "$mydir"/*\(*\)* ) # using glob
printf '%s\n' "${pages[@]}"

然后迭代页面:

for page in "${pages[@]}"; do
    echo "$page"
done

并停止使用邪恶的 eval =)