Makefile Make:匹配文件名中的日期写入文件并将文件写入新位置

Makefile Make:匹配文件名中的日期写入文件并将文件写入新位置,makefile,gnu-make,Makefile,Gnu Make,我想使用makefile来获取文件,当然,所有这些都需要推广: src/post/2015-01-01-filename.md 写信给 content/post/filename.md 将文件名2015-01-01的一部分添加到文件中。因此,unix部分类似于: sed '1 adate: 2015-01-01' > content/post/filename.md content/%.md: $(subst ./,,$(shell find ./src/post/ -regexty

我想使用makefile来获取文件,当然,所有这些都需要推广:

src/post/2015-01-01-filename.md
写信给

content/post/filename.md
将文件名2015-01-01的一部分添加到文件中。因此,unix部分类似于:

sed '1 adate: 2015-01-01' > content/post/filename.md
content/%.md: $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md'))
在makefile中,我将编写如下内容:

sed '1 adate: 2015-01-01' > content/post/filename.md
content/%.md: $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md'))
我不太确定如何去掉日期并将其粘贴到文件中,并将其与makefile匹配

有没有一个简单直接的解决方案

另外,如果原始文件的名称类似于2015-01-01.filename.md,是否可以更轻松地执行所有这些操作

更新

这就是我到目前为止所做的,但还没有完全发挥作用:

POST_SRC := $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md'))

define POSTS_PARSE
_target := $(shell $1 | grep -Po '\w+\.md')
POSTS := $$(POSTS) $$(_target)
$$(_target): $1
    date=$(basename $< | grep -Po '\d{4}-\d{2}-\d{2}');\
        cat $< | sed '1 a'$date > $@
endef

$(foreach x,$(POST_SRC),$(eval $(call POSTS_PARSE,$x)))

posts: $(POSTS)

我终于明白了。不确定是否有更好的方法

POST_SRC := $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md'))

define POSTS_PARSE
_target := $(shell echo $1 | grep -Po '\w+\.md')
POSTS := $$(POSTS) $$(_target)
$$(_target): $1
  date=$$$$(basename $$< | grep -Po '\d{4}-\d{2}-\d{2}'); \
    sed "1 adate: $$$$date" $$< > $$@
endef

$(foreach x,$(POST_SRC),$(eval $(call POSTS_PARSE,$x)))

posts: $(POSTS)

你知道日期吗?您不能将其设置为make变量,并简单地进行适当设置,使用它来构建文件名吗?或者你必须找到文件并调整到你找到的日期吗?后者。原始信息仅用于说明/简化目的。那么我认为我不会使用make来完成此任务;它真的不是为它而设计的。我需要一个通用的shell脚本来完成这项工作,如果需要的话,还可以从makefile调用shell脚本。