S-JIS[2004-01-04/2009-01-29] 変更履歴

Ant:copy

ファイルやディレクトリをコピーするコアタスク。
(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]

(@で囲まれたキーワードでなく、)文字列を置換する方法


@sleep@」→「zzz」、「@foo@」→「bar」に変換する例

コピー対象ファイル(test.txt)の例:

abc@sleep@123@foo@.

↓(コピー後)

abczzz123bar.

build.xmlの指定方法その1:

	<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を指定していても置換されない。


build.xmlの指定方法その2:

		<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にしても、置換は実施される。


build.xmlの指定方法その3:

		<copy todir="${dst}" overwrite="yes">
			<fileset dir="${src}">
				<include name="**/*.txt" />
			</fileset>
			<filterset filtersfile="filter.properties" />
<!--			<filterset>
				<filtersfile file="filter.properties" />
			</filterset>
-->
		</copy>

変換用のキーワードをプロパティーファイルに書いておいて それを使うことも出来る。

filtersetfiltersfile属性を指定してプロパティーファイル名を指定する。
もしくは、filtersetの中にfiltersfile要素を置き、そこでプロパティーファイル名を指定する。

filter.properties

sleep=zzz
foo=bar

Ant目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま