1

我想复制映射网络目录上的最新文件。我已经将网络目录映射到${drive.letter}使用NET USE.

<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在本地复制所有文件然后执行排序,但我不确定副本是否会更改时间戳。

4

2 回答 2

0

如果您使用的是 UNIX,我会说使用在单行命令行中执行此操作。使用 ls/find、sort 和 head,这可以是一个单行。这样做的好处是不需要很多额外的工作(Ant 正忙于构建文件集并通过网络一次做很多事情)并让操作系统对其进行优化。

然后我搜索了如何在 Windows 中执行此操作,并找到了这一行。同样的想法。我怀疑在操作系统级别上做起来会更快。(虽然没有本地文件那么快。)

另一种选择是运行 dir 并解析/排序该结果。如果必须在运行时完成,我无法想象在本地复制文件会更快。

于 2012-06-29T20:21:16.603 回答
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
于 2012-07-02T18:08:40.737 回答