ファイルやディレクトリをコピーするコアタスク。
(org.apache.tools.ant.taskdefs.Copy extends
Task)
|
|
→最新copy |
属性 | 説明 | 更新日 |
---|---|---|
file="ファイル名" | コピーしたいファイル。 | |
tofile="ファイル名" | コピー先のファイル名。 | |
todir="ディレクトリ名" | コピー先のディレクトリ名。 | |
preservelastmodified="true" | タイムスタンプもコピーする。 | |
overwrite="yes" | yesにすると、常にコピーする。 noにすると、コピー先にファイルが存在してそちらの方が新しい場合はコピーしない。 |
2008-06-21 |
filtering="true" | フィルタリングを行う。 | 2008-06-21 |
encoding="文字コード" | 入力用文字コードを指定する。(Ant1.5以降) | 2009-01-29 |
outputEncoding="文字コード" | 出力用文字コードを指定する。省略した場合はencodingと同じ。(Ant1.6以降) (改行コードも変換したいならfixcrlfを使う) |
2009-01-29 |
<target name="backup"> <copy preservelastmodified="true" file="test/test.txt" tofile="test/test.bak" /> </target>
<target name="backup"> <copy todir="../backup/dir" > <fileset dir="src_dir" /> <mapper type="glob" from="*" to="*.bak"/> </copy> </target>
<target name="copy"> <copy todir="to_dir" > <fileset dir="src_dir"> <exclude name="test/**/*"/> <exclude name="test"/> </fileset> </copy> </target>
fileset内に書かれたexcludeによって、除外したいファイルやディレクトリを指定する。
test/**/*のみだと、testより下の全ファイル・ディレクトリが除外されるが、testディレクトリだけは作成される(中身は空っぽ)。
testのみだと、サブディレクトリがコピーされる為か、testディレクトリは除外されない。
copyには、ファイルをコピーする際に、ファイル内の@で囲まれたキーワードを別の文字列に変換する機能がある。[2008-06-21]
コピー対象ファイル(test.txt)の例:
abc@sleep@123@foo@.
↓(コピー後)
abczzz123bar.
<target name="filter"> <filter token="sleep" value="zzz" /> <filter token="foo" value="bar" /> <copy todir="${dst}" filtering="yes" overwrite="yes"> <fileset dir="${src}"> <include name="**/*.txt" /> </fileset> </copy> </target>
copyタスクの前に、filterを使ってtoken(置換元文字列)とvalue(置換後文字列)を指定しておく。
copyタスクのfilterring属性をyes(true)にしておくと、filterで指定されたキーワードを使って置換を行う。
no(false:デフォルト)にしておくと、filterを指定していても置換されない。
<copy todir="${dst}" overwrite="yes"> <fileset dir="${src}"> <include name="**/*.txt" /> </fileset> <filterset> <filter token="sleep" value="zzz" /> <filter token="foo" value="bar" /> </filterset> </copy>
copyタスクのボディー部にfilterset要素を置き、その中のfilterで置換元文字列(token)と置換後文字列(value)を指定する。
この方法の場合、copyタスクのfilterring属性をyesにしてもnoにしても、置換は実施される。
<copy todir="${dst}" overwrite="yes"> <fileset dir="${src}"> <include name="**/*.txt" /> </fileset> <filterset filtersfile="filter.properties" /> <!-- <filterset> <filtersfile file="filter.properties" /> </filterset> --> </copy>
変換用のキーワードをプロパティーファイルに書いておいて それを使うことも出来る。
filtersetでfiltersfile属性を指定してプロパティーファイル名を指定する。
もしくは、filtersetの中にfiltersfile要素を置き、そこでプロパティーファイル名を指定する。
sleep=zzz foo=bar