我已经写了好几个月了。我创建的文件是带有日期的文件,其名称类似于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
你可以尝试这样的事情。我已将您提供的确切内容写入三个文本文件sample1
、sample2
、 和。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