2017-05-29 6 views
0

私は、プロジェクトのために必要な作業を自動化するためのmakefileを書いています。データサイクエンスワークフローのMakefile

gzアーカイブからcsvファイルを抽出するタスクの1つです。 あらかじめgzアーカイブやcsvファイルの名前を知りません。

私は以下のルール(実際のタブ付き)を書いてタスクを実行しました。

process_new_data: data/%.gz 
    some_script.sh 

私が間違って何をしました:

data/%.gz: data/%.csv 
    echo "extract" [email protected] "from" $< 
    gzip -d -k ./data/$* 

問題は、私が実行しようとすると、それが実行されないのですか? 私が理解しているように、ファイル抽出ルールは、データフォルダにあるgzアーカイブごとに1回実行する必要があります。

+0

targets : prerequisites recipe 

完全Makefilewildcardpatsubst機能を使用します'process_new_data'はどのファイル(.csvまたは.gz)と正確に何をするべきですか? – syntagma

+0

データを読み取って処理するスクリプトは1つだけです – sgp667

答えて

1

"逆転" する必要がありますCSVファイルを抽出するためのあなたのルール:

data/%.csv: data/%.gz 
    echo "extract" [email protected] "from" $< 
    gzip -d -k ./data/$* 

構文OS:

GZ_FILES = $(wildcard data/*.gz) 
CSV_FILES = $(patsubst data/%.gz, data/%.csv, $(GZ_FILES)) 

process_new_data: $(CSV_FILES) 
    ./some_script.sh 

data/%.csv: data/%.gz 
    echo "extract" [email protected] "from" $< 
    gzip -d -k ./data/$*