将 html 个文件从源目录复制到构建目录
Copy html files from source directory to build directory
我正在为网站编写 makefile。
我有一个名为 src/
和 build/
的目录
基本上,我想像这样获取文件:
src/index.html
src/blog/title1/index.html
src/blog/title2/index.html
然后将它们复制到 build/
目录,如下所示:
build/index.html
build/blog/title1/index.html
build/blog/title2/index.html
我试着写了一条规则,但我不太确定如何调试:
src_html := src/**/*.html
build_html := $(shell find src -name '*.html' | sed 's/src/build/')
$(src_html): $(build_html)
@cp $< $@
尝试这样的事情:
#! /bin/bash
# get htm files
find . -name '*html' > files
# manipulate file location
sed 's/src/build/' files | paste files - > mapping
# handle spaces in the file names
sed 's/ /\ /' mapping > files
# output mapping to be sure.
cat files
echo "Apply mapping?[Y/n]"
read reply
[[ $reply =~ [Yy].* ]] || exit 1
# copy files from column one to column two
awk '{ system("cp "" ")}' files
exit 0
编辑
不等了,我有一个班轮:
$ find -name '*html' -exec bash -c 'file=$(echo {}); file=$(echo $file | sed "s:\/:\\/:g"); cp "{}" $(echo ${file/src/build} | sed "s:\\/:\/:g")' \;
如果安装了 rsync 就可以使用了。
default:
rsync -r --include '*/' --include='*.html' --exclude='*' src/ build/
为了完整起见,make 可以使用静态模式规则很好地处理这个问题:
src := src/index.html src/blog/title1/index.html src/blog/title2/index.html
# or src := $(shell find …) etc., but hopefully the makefile already has a list
dst := $(patsubst src/%,build/%,${src})
${dst}: build/%: src/% ; cp $< $@
.PHONY: all
all: ${dst}
这也-j
安全,而且不会复制尚未更新的文件。
我正在为网站编写 makefile。
我有一个名为 src/
和 build/
基本上,我想像这样获取文件:
src/index.html
src/blog/title1/index.html
src/blog/title2/index.html
然后将它们复制到 build/
目录,如下所示:
build/index.html
build/blog/title1/index.html
build/blog/title2/index.html
我试着写了一条规则,但我不太确定如何调试:
src_html := src/**/*.html
build_html := $(shell find src -name '*.html' | sed 's/src/build/')
$(src_html): $(build_html)
@cp $< $@
尝试这样的事情:
#! /bin/bash
# get htm files
find . -name '*html' > files
# manipulate file location
sed 's/src/build/' files | paste files - > mapping
# handle spaces in the file names
sed 's/ /\ /' mapping > files
# output mapping to be sure.
cat files
echo "Apply mapping?[Y/n]"
read reply
[[ $reply =~ [Yy].* ]] || exit 1
# copy files from column one to column two
awk '{ system("cp "" ")}' files
exit 0
编辑
不等了,我有一个班轮:
$ find -name '*html' -exec bash -c 'file=$(echo {}); file=$(echo $file | sed "s:\/:\\/:g"); cp "{}" $(echo ${file/src/build} | sed "s:\\/:\/:g")' \;
如果安装了 rsync 就可以使用了。
default:
rsync -r --include '*/' --include='*.html' --exclude='*' src/ build/
为了完整起见,make 可以使用静态模式规则很好地处理这个问题:
src := src/index.html src/blog/title1/index.html src/blog/title2/index.html
# or src := $(shell find …) etc., but hopefully the makefile already has a list
dst := $(patsubst src/%,build/%,${src})
${dst}: build/%: src/% ; cp $< $@
.PHONY: all
all: ${dst}
这也-j
安全,而且不会复制尚未更新的文件。