Groovyスクリプトでファイルコピーをやってみる

試験環境作成の一環として以下の様なディレクトリ構成とファイル配置を作って欲しいとのオーダーがあり、ちょっとやってみたメモ。

イメージとしては

 $ groovy makeDateDirectory.groovy startYEAR startMONTH startDATE endYEAR endMONTH endDATE outputPath copyFile

です。

leftSfit方式

最初はこちらgroovyで簡単ファイルコピー (気楽に行こう)を参考にして、こんな感じのコードを書いてみました。

new File("コピー先ファイル名パス") << new File("コピー元ファイル名パス").readBytes()

ためしにhoge.txt等をコピーしてみてうまいこといっていたのですが、本番でコピーしたいファイルが500MB以上あることがわかり、「java.lang.OutOfMemoryError: Java heap space」が発生してしまいました。
※readBytes()だと一気にメモリに展開してしまうため。

FileUtils.copyFile方式

で、id:yamkazu に相談したところ便利な方法を教えてくれました。

@Grab(group='commons-io', module='commons-io', version='2.4')
import org.apache.commons.io.FileUtils
FileUtils.copyFile(new File("src.txt"), new File("dist.txt"))

Groovyで利用できる管理ツール「Grape」を使って、FileUils.copyFile()を使う、というやり方。
ただし実行時にインターネッツに接続している必要があるのと、Proxy配下だとgroovyにProxy設定を教えてあげる必要があります。
具体的にはこんな感じ。

$ groovy -DproxyHost=proxy.server.name -DproxyPort=xxxx makeDateDirectory.grovy ...

ということでコード全体はこんな感じGitHub - jinkojima/makeDateDirectory at onlyWeekdayになりました。まだMasterにマージしてないけど、指定された期間中の平日だけを対象にしてみた。これを引数で(=毎日or平日)使い分けられるようになったらマージしたい。