2012-06-29 44 views
1

我想複製映射網絡目錄上的最新文件。我已經使用NET USE將網絡目錄映射到${drive.letter}Ant中的緩慢排序

<copy todir="${dest.dir}" overwrite="true"> 
    <first> 
     <sort> 
      <fileset dir="${drive.letter}\"> 
       <filename name="FileIWant-*.tar.gz" /> 
      </fileset> 
      <date xmlns="antlib:org.apache.tools.ant.types.resources.comparators"/> 
     </sort> 
    </first> 
</copy> 

它需要一個非常長的時間完成這個任務完成,我想知道爲什麼需要這麼長,如果我能加快速度。網絡目錄中有20K +個文件。排序任務是先運行,然後是文件集選擇器?還是隻是因爲它通過網絡需要一段時間?

唯一的其他解決方案,我可以想到它在本地複製所有FileIWant-*.tar.gz文件,然後執行排序,但我不確定副本是否會更改時間戳。

回答

0

我寫了一個bat腳本來爲我做這個,因爲它更快,我只是從我的Ant腳本中調用它。

echo Logging on to Server 
net use %NetworkDir% 
if not errorlevel 0 goto error 

pushd %NetworkDir% 
for /f "tokens=*" %%A in ('dir %FileIWant% /b /o:D') do (set sourceFile=%%A) 
echo Copying %%A... 
xcopy /V/F/Z/Y "%sourcefile%" "%copyTo%" 
popd 
0

如果您使用的是UNIX,我會說在一行命令行中使用它。使用ls/find,sort和head,這可以是一個班輪。這樣做的好處是不需要額外的工作(Ant正在忙於構建文件集,並通過網絡一次處理大量事情),並讓操作系統對其進行優化。

然後我搜索瞭如何在Windows中做到這一點,發現this one liner。同樣的想法。我懷疑在操作系統級別執行操作會更快。 (雖然沒有本地文件那麼快)。

另一種選擇是運行dir並對結果進行分析/排序。如果必須在運行時完成,我無法想象在本地複製文件會更快。