2

Ruby を使用してエンコードしたい入力ファイルがいくつかあります。エンコーディングからの出力は、入力ファイルのファイル名に基づいたパターンと一致する必要があります。これを手作業で行わないために、Rake を自動化の助けとして使用したいと考えています。さらに、入力ファイルごとに単一のタスクを指定したくありません。

FileList の「マジック」を試してみましたが、うまくいきませんでした。コードは次のとおりです。

desc 'Create all output from specified input'
task :encode do
  FileList['input/*.txt'].each {|input| file "output/output_#{input}" => input}
end

誰でも助けることができますか?依存関係としての複数の出力ファイルについて、ウェブ上で何も見つかりませんでした。

4

1 に答える 1

2

rule正規表現ルールに基づいてタスクを動的に定義できるRakeのタスクの使用を検討します。詳細についてはrakefile の rdocページを参照してください。以下に例を示します。

# creates the 'output' directory on demand
directory "output"

# define a task rule covering all the output files
rule %r{output/output_} => ['output', proc {|task_name| "input/#{task_name.sub('output/output_', '')}.txt"}] do |t|
  # replace this with your encoding logic
  sh "echo 'file #{t.source}' > #{t.name}"
end

# define a top-level 'encode' task which depends on all the 'output/output_*' tasks
task :encode => Dir['input/*.txt'].map {|x| "output/output_#{File.basename(x).sub('.txt', '')}"}

そして、rake encodeファイルが一致するディレクトリで実行しinput/*、出力ファイルを に配置できるはずですoutput/output_*

于 2013-03-19T07:39:16.633 に答える