我正在运行一个构建脚本,其中三个可执行文件(每个100mb)上传到FTP服务器。
由于FTP服务器空间问题,第一次上传可能失败,因此我们的构建过程失败。这意味着我必须从服务器中释放一些空间,并再次运行构建脚本,这是浪费时间。我想在上传exe之前检查一下FTP的大小,以确保有空间。如果有足够的空间,则上传,否则提示用户输入。
如何在ant脚本中查看FTP的大小
正如评论中所讨论的,您可以按照以下行编写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
替换为您将要下载的目录的实际路径。
将该脚本添加到服务器的crontab (crontab -e
)并让它每小时运行一次(0 * * * *
)左右。您可以下载free_space.txt
文件,其中包含FTP服务器每小时更新一次的空闲空间。
FTP服务器通常不允许这样做,但是您可以尝试以下命令:
ftp> site df -kl
但是,我建议您在FTP服务器上调度一个脚本,该脚本将当前可用空间(反过来您可以从客户端读取)写入TXT文件。
我们的产品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>
可能的解决方案是FTP> df -h