检查FTP服务器上的可用空间

时间:2011-11-15 11:02:22

标签: java ant build ftp

我正在运行一个构建脚本,其中三个可执行文件(每个100mb)上传到FTP服务器。

由于FTP服务器空间问题,第一次上传可能会失败,因此我们的构建过程失败。这意味着我必须从服务器释放一些空间并再次运行构建脚本,这是浪费时间。我想在上传exe之前检查FTP大小,以确保空间存在。如果有足够的空间,则上传否则提示用户输入。

如何在ant脚本中检查FTP大小。

4 个答案:

答案 0 :(得分:1)

FTP服务器通常不允许这样做,但您可以尝试命令:

ftp> site df -kl

但是,我建议您在FTP服务器上安排一个脚本,该脚本将TXT文件写入当前可用空间(反过来您可以从客户端读取)。

答案 1 :(得分:1)

正如comments中所讨论的,您可以编写一个shell脚本(假设FTP服务器是一个linux框),其行如下:

#!/bin/bash

FTPDIR="/path/to/ftp/dir"
echo `df -kl / | tail | awk '{print $4}'` > ${FTPDIR}/free_space.txt

确保将path/to/ftp/dir替换为您要下载的目录的实际路径。

将该脚本添加到服务器的crontabcrontab -e)并让它每小时运行一次(0 * * * *)左右。您可以下载free_space.txt文件,其中包含FTP服务器每小时更新的可用空间。

答案 2 :(得分:1)

我们的产品CompleteFTP允许您添加自定义命令。可以从任何协议(FTP,SFTP,SSH,HTTP)调用自定义命令。在这种情况下,它将被称为FTP SITE命令。

可以通过嵌入式Javascript或.NET程序集添加自定义命令。嵌入式Javascript更易于使用,因此我为您开发了一个脚本:

function drivespace(driveLetter) {
    var driveName = driveLetter.toUpperCase() + ":\\";
    var drives = System.IO.DriveInfo.GetDrives();
    for (var i=0; i<drives.Length; i++) {
        var drive = drives[i];
        if (drive.Name == driveName)
            return drive.TotalFreeSpace;
    }
    throw "Could not find drive " + driveName;
}

请注意,即使它是Javascript,它也会调用.NET类System.IO.DriveInfo。该脚本直接输入管理工具,可立即使用。

这是一个示例命令行会话,显示它被调用:

Connected to MyServer.
220-Complete FTP server
220 CompleteFTP v 10.1.0
530 Please login with USER and PASS
User (MyServer:(none)): myuser
331 Password required for myuser
Password:
230 User myuser logged in.
ftp> SITE drivespace C
200-170992414720
200 SITE command successful.
ftp> SITE drivespace g
501-Could not find drive G:\
501 SITE command failed.
ftp>

答案 3 :(得分:0)

可能的解决方案是 ftp&gt; df -h