【问题标题】:Sorting files based on content in bash根据 bash 中的内容对文件进行排序
【发布时间】:2016-07-16 15:11:07
【问题描述】:

我使用markdown做笔记,并保存在下面的结构中

$NOTESDIR
- preface.md
- styling.tex
+ YR1
    + sem1
        - "LinAlgDat - Transformations and matrices.md"
    + sem2
        - "PoP - something fancy.md"
+ YR2
    + sem3
    + ...
+ YR3
    + ...
    + sem6

我正在编写一个脚本,以使用 pandoc 将学期编译为 pdf,或将整年编译为 pdf

pandoc --toc -o "${1}.pdf" "$NOTESDIR/preface.md" $2 &&
echo "Compiling ${1}.pdf"

现在,要将所有文件名提供给命令,我必须对它们进行排序。我想按课程(LinAlgDat,PoP)或按日期对它们进行排序(所有笔记文件都包含一行“>日期:DD-MM-YY”。我可以轻松地使用“ack”来获取所有文件,但我还没有找到对ack的输出进行排序的解决方案。

【问题讨论】:

  • 你的格式已经非常接近 YAML 了;我建议切换到那个,然后使用带有 YAML 解析器的语言来处理数据。
  • 每个semX 目录中是否有一个.md .file?
  • 每个 semX 目录中有多个 .md,通常还有多个课程。
  • 很遗憾,您没有使用像YYYY-MM-DD 这样的自然排序格式命名您的文件。因此,您必须将文件名保存到文本文件中,然后在该文件上使用sort -k3 -k2 -k1(或类似的man sort 并查看sort Qs 以了解*k*eys 的高级用法)并使用它来驱动你的处理。祝你好运。

标签: bash pandoc ack


【解决方案1】:

我找到的解决方案是确认所有包含该字符串的文件,然后将日期添加到包含文件名的字符串中。然后对文件名进行排序,使用 sed 抓取文件名的顺序。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多