给出以下目录结构
.
├── Makefile
├── test.test.io
│ └── topic
│ └── foo.yaml
└── foo.bar.us
├── topic
│ └── foo.yaml
│ └── bar.yaml
└── other
└── baz.yaml
我想制作:
.
├── build
│ └── topic
│ │ └── test.test.io-foo.done
│ │ └── foo.bar.us-foo.done
│ │ └── foo.bar.us-bar.done
│ └── other
│ └── foo.bar.us-foo.done
我从正常的事物开始:
TOPIC_SOURCES := $(shell find . -path '*/topic/*.yaml')
TOPIC_DEPLOYS := $(TOPIC_SOURCES:%.yaml=build/%.done)
build/%.done: %.yaml
@echo %< %@
但是我有点费力地想找出如何使用给定的工具完成其余的转换,因为我需要执行类似于sed -E 's|^./(.*)/topic/(.*).yaml|\1-\2.done|'
的操作
Make的通配符处理不符合此要求。使用shell
调用sed:
TOPIC_DEPLOYS := $(shell find . -path '*/topic/*.yaml' | sed 's|./\(.*\)/\(.*\)/\(.*\).yaml|\2/\1-\3.done|')