2012-06-29 2 views
1

Я хочу скопировать новейший файл, находящийся в сетевом каталоге с сопоставлением. У меня уже есть сетевой каталог, сопоставленный ${drive.letter} с использованием NET USE.Медленная сортировка в 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 и анализ/сортировка этого результата. Я не могу себе представить, что копирование файлов локально будет быстрее, если это нужно сделать во время выполнения.

Смежные вопросы