我想定期镜像一棵正在增长的树,例如,从$ in到$ out,在中间执行一个过程(保存唯一的文件头)。作为;
#!/bin/bash
in=./segd
out=./db
for f in `find $in -name "*.segd"`;do
# Deduct output (dir + name)
d=`dirname $f|perl -pe 's!'$in'!'$out'!'`
n=`basename $f|perl -pe 's!$!_hdr!'`
if [ ! -e $d/$n ]; then
[ ! -d $d ] && mkdir -p $d;
printf "From %s now build %s\n" $f "$d/$n"
# Do something, whathever. For example e.g;
dd if=$f bs=32 count=1 conv=swab 2>/dev/null|od -x > $d/$n
fi
done
这是公平的。然而;为了更好的同步(如果源文件确实发生了变化或其他),我想使用Makefile,如;
HDR := $(patsubst ./segd/%.segd,./db/%.segd_hdr,$(wildcard ./segd/*.segd))
all: ${HDR}
db/%.segd_hdr: ./segd/%.segd
echo "Doing"
dd if=$< bs=32 count=1 conv=swab 2>/dev/null|od -x > $@
我的问题;我无法将此Makefile编码为&#34;潜水&#34;更深入的源./segd树。我们怎么做呢,有办法吗?非常感谢您的推荐。
PS:我的想法是稍后通过sat连接rsync(较小的)目标树。
答案 0 :(得分:0)
您可以在find
功能的帮助下调用$(shell)
命令:
HDR := $(patsubst ./segd/%.segd,./db/%.segd_hdr, $(shell find ./segd -name "*.segd"))