Makefile文件;通过一个过程镜像一棵正在成长的树

时间:2014-05-28 15:04:30

标签: bash makefile

我想定期镜像一棵正在增长的树,例如,从$ 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(较小的)目标树。

1 个答案:

答案 0 :(得分:0)

您可以在find功能的帮助下调用$(shell)命令:

HDR := $(patsubst ./segd/%.segd,./db/%.segd_hdr, $(shell find ./segd -name "*.segd"))