2014-09-23

2014-09-23

我已经写了好几个月了。我创建的文件是带有日期的文件,其名称类似于2011-06-13.markdown每日内容。我决定将所有内容写入一个文件中,但我希望条目按时间顺序排列,并带有日期标题(来自文件名)。这意味着我想要一个包含以下三个文件的单独文件的目录:

2014-09-21.markdown

看看我写的这些字!

2014-09-22.markdown

这是我有一个认真的写作习惯!

2014-09-23.markdown

在 stackexchange 上问的问题。该死,这是一个有帮助的社区!

最终看起来像这样一个文件:

writing.markdown

2014-09-23

在 stackexchange 上问的问题。该死,这是一个有帮助的社区!

2014-09-22

这是我有一个认真的写作习惯!

2014-09-21

看看我写的这些字!

所有文件都位于一个目录中,并且命名正确。我怀疑find和的某种组合cat可以帮助我,但我不确定具体如何进行。

答案1

$file这是一种使用单个文件(我们现在将其称为)执行您想要的操作并将其打印到标准输出的方法

# prepend a "# " and remove the .markdown from the filename
sed 's/\.markdown//' <<< "# $file"
# print a blank line
echo
# output the file
cat "$file"

现在,对于您真正想要的,将其包含在循环中for以迭代目录中的每个降价。然后将结果输出到文件中。

for file in *.markdown; do
    # prepend a "# " and remove the .markdown from the filename
    sed 's/\.markdown//' <<< "# $file"
    # print a blank line
    echo
    # output the file
    cat "$file"
    # separate the files with another blank line
    echo
done > writing.markdown

编辑:等等,这不是你想要的!要反转顺序,我们可以使用find命令查找所有 Markdown 文件,然后将输出通过管道传输sort -r以获得您想要的反向排序顺序。最后,将其输入read并循环。此外,我们需要basename在从文件名中提取日期时调用,因为find返回的是路径而不是文件名。

find -name '*.markdown' -not -name 'writing.markdown' | sort -r | while read file; do
    # prepend a "# " and remove the .markdown from the filename
    sed 's/\.markdown//' <<< "# $(basename $file)"
    # print a blank line
    echo
    # output the file
    cat "$file"
    # separate the files with another blank line
    echo
done > writing.markdown

由于它们确实很难通过谷歌搜索,因此我提供了一些文档的链接这里是字符串如果您不熟悉它们。

答案2

你可以尝试这样的事情。我已将您提供的确切内容写入三个文本文件sample1sample2、 和。sample3当我输入这个命令时:

cat sample1 sample2 sample3 >> sample4

当我执行以下操作时,我会得到这个结果cat sample4

2014-09-23
Asked question on stackexchange. Damn that is a helpful community!
2014-09-22.markdown
That's one serious writing habit I have!
2014-09-21.markdown
Look at all these words I've written!

附加>>sample4,而单个会在每次使用时>覆盖。sample4因此,对于您的情况,您可以使用以下命令:

cat 2014-09-23.markdown 2014-09-22.markdown 2014-09-21.markdown >> writing.markdown

相关内容