2012-05-09 72 views
1

比方說,我有這樣的目錄結構:螞蟻:重命名同名的子目錄

  • 動物/狗/細節
  • 動物/ CAT /細節
  • 動物/青蛙/細節
  • 動物/馬/細節

使用螞蟻,我想重新命名animals下的所有子目錄稱爲details現在被命名爲new。所以結果會是這樣:

  • 動物/狗/新
  • 動物/ CAT /新
  • 動物/青蛙/新
  • 動物/馬/新

我我試過這樣的事情:

<move tofile="new"> 
     <path id="directories.to.rename"> 
      <dirset dir="animals"> 
       <include name="**/details"/> 
      </dirset> 
     </path> 
    </move> 

但是得到這個錯誤:

Cannot concatenate multiple files into a single file. 
+0

可能重複http://stackoverflow.com/questions/1041213/how-to-rename-a-folder-using-ant –

+2

我不認爲這涉及到礦山作爲一個不與多個子處理-directories。 – digiarnie

回答

1

使用Ant-Contribfor任務和propertyregex任務。

<target name="test"> 
    <for param="detailsDir"> 
    <dirset dir="animals"> 
     <include name="**/details"/> 
    </dirset> 
    <sequential> 
     <propertyregex property="output.dir" input="@{detailsDir}" regexp="(.*)/details" replace="\1" /> 
     <move file="@{detailsDir}" toFile="${output.dir}/new" /> 
    </sequential> 
    </for> 
</target> 
+0

因爲我的ant-contrib版本使用foreach(而不是for),所以我不得不做一些tweeking,但是你在那裏工作的核心思想非常好。謝謝! – digiarnie

3

你可以進行你通過mapper來形容重命名。例如:

<move todir="animals"> 
    <dirset dir="animals" includes="**/details" /> 
    <globmapper from="*/details" to="*/new"/> 
</move> 

(有在move task docs結束一個類似的例子。)

你站起身看見了,因爲你已經混動任務的單文件模式下的錯誤(TOFILE )與多文件模式。 由於move任務接受任何基於文件的資源收集(包括dirset),所以不需要將dirset嵌套在path中。