移動

說明

將檔案移至新的檔案或目錄,或將檔案集合移至新的目錄。預設情況下,如果目標檔案已存在,則會覆寫它。當 overwrite 關閉時,只有當來源檔案比目標檔案新,或當目標檔案不存在時,才會移動檔案 - 請參閱 granularity 屬性以了解 Ant 認為較新的觀念。

資源集合 用於選取要移動的檔案群組。僅支援基於檔案系統的資源集合,其中包括 檔案集檔案清單路徑。在 Apache Ant 1.7 之前,只有 <fileset> 才被支援為巢狀元素。若要使用資源集合,必須設定 todir 屬性。

自 Ant 1.6.3 起file 屬性可用於移動(重新命名)整個目錄。如果 tofile 表示現有檔案,或在 todir 中有同名目錄,則動作將會失敗。

參數

屬性 說明 必要
file 要移動的檔案或目錄 file 或至少一個巢狀資源集合元素之一
preservelastmodified 讓已移動檔案的最後修改時間與原始來源檔案相同。(注意:Java 1.1 中忽略) 否;預設為 false
tofile 要移動到的檔案 使用 file 屬性時,可以使用 tofiletodir。對於巢狀檔案集,如果檔案集大小大於 1,或如果檔案集中唯一的項目是目錄,或如果已經指定 file 屬性,則只允許使用 todir
todir 要移動到的目錄
overwrite 即使目標檔案較新,也覆寫現有檔案 否;預設為 true
force 覆寫唯讀目標檔案。自 Ant 1.8.2 起 否;預設為 false
filtering 表示在移動過程中是否應進行代碼過濾。請參閱 filter 任務以了解過濾器的運作方式。
flatten 忽略來源目錄的目錄結構,將所有檔案複製到由 todir 屬性指定的單一目錄中。請注意,您可以使用 flatten mapper 來達成相同的目的 否;預設為 false
includeEmptyDirs 複製包含在巢狀 FileSet 中的空目錄。 否;預設為 yes
failonerror 如果為 false,則在要複製的檔案不存在或其中一個巢狀 fileset 指向不存在的目錄,或在移動時發生錯誤時,記錄警告訊息,但不要停止建置。 否;預設為 true
quiet 如果為 truefailonerrorfalse,則在要複製的檔案不存在或其中一個巢狀 fileset 指向不存在的目錄,或在複製時發生錯誤時,不要記錄警告訊息。自 Ant 1.8.3 起 否;預設為 false
verbose 記錄正在移動的檔案。 否;預設為 false
encoding 在過濾複製檔案時要假設的編碼。自 Ant 1.5 起 否;預設為 JVM 預設字元編碼
outputencoding 在寫入檔案時要使用的編碼。自 Ant 1.6 起 否;預設為已設定的 encoding,否則為 JVM 預設字元編碼
enablemultiplemappings 如果為 true,則任務將處理給定來源路徑的所有對應。如果為 false,則任務將只處理第一個檔案或目錄。此屬性僅在有 mapper 子元素時才相關。自 Ant 1.6 起 否;預設為 false
granularity 在判定檔案過期之前給予的寬限毫秒數。這是必要的,因為並非每個檔案系統都支援追蹤到毫秒等級的最後修改時間。如果來源和目標檔案位於時鐘不同步的不同機器上,這也可能很有用。自 Ant 1.6 起 否;預設為 0 毫秒,或在 DOS 系統上為 2 秒
performGCOnFailedDelete 如果 Ant 無法刪除檔案或目錄,它將重試一次操作。如果此旗標設定為 true,它將在重試刪除之前執行垃圾回收。
已知將此旗標設定為 true 可以解決 Windows 上的一些問題(在 Windows 上預設為 true),以及位於 NFS 共享上的目錄樹的問題。自 Ant 1.8.3 起
否;在 Windows 上預設為 true,在其他作業系統上預設為 false

指定為巢狀元素的參數

mapper

您可以使用嵌套的 mapper 元素來定義檔案名稱轉換。<move> 使用的預設 mapper 是 identity

請注意,傳遞給 mapper 的來源名稱取決於您使用的資源集合。如果您使用 <fileset> 或提供基本目錄的任何其他集合,傳遞給 mapper 的名稱將是相對於基本目錄的相對檔案名稱。在任何其他情況下,將使用來源的絕對檔案名稱。

filterchain

Move 任務支援嵌套的 FilterChain

如果在同一個 <move> 任務中使用 <filterset><filterchain> 元素,則會先處理所有 <filterchain> 元素,再處理 <filterset> 元素。

範例

移動單一檔案(重新命名檔案)

<move file="file.orig" tofile="file.moved"/>

將單一檔案移動到目錄

<move file="file.orig" todir="dir/to/move/to"/>

將目錄移動到新目錄

<move todir="new/dir/to/move/to">
  <fileset dir="src/dir"/>
</move>

或,自 Ant 1.6.3 起

<move file="src/dir" tofile="new/dir/to/move/to"/>

將一組檔案移動到新目錄

<move todir="some/new/dir">
  <fileset dir="my/src/dir">
    <include name="**/*.jar"/>
    <exclude name="**/ant.jar"/>
  </fileset>
</move>

將檔案清單移動到新目錄

<move todir="some/new/dir">
  <filelist dir="my/src/dir">
    <file name="file1.txt"/>
    <file name="file2.txt"/>
  </filelist>
</move>

".bak" 附加到目錄中所有檔案的名稱。

<move todir="my/src/dir" includeemptydirs="false">
  <fileset dir="my/src/dir">
    <exclude name="**/*.bak"/>
  </fileset>
  <mapper type="glob" from="*" to="*.bak"/>
</move>