在日常工作中,经常需要通过FTP上传或下载大文件,比如网站备份、设计原稿或者视频素材。传个几百兆的文件,最怕的就是卡住还不知道跑到哪了,只能干等。其实,FTP传输过程中完全可以实时查看进度,不用靠猜。
使用支持进度显示的FTP客户端
大多数图形化FTP工具都会直接显示传输进度条。比如FileZilla,连接服务器后开始传文件,下方的传输队列会清楚列出每个文件的名称、传输速度、已传大小和剩余时间。绿色进度条一目了然,就像手机下载APP那样直观。
类似的工具还有WinSCP、Cyberduck,它们不仅显示进度,还能暂停、续传,甚至设置带宽限制,避免占满网络影响其他操作。
命令行下也能看进度
如果你习惯用命令行操作,原生ftp命令确实不支持进度条。但可以用lftp替代,它功能更强。安装后执行:
lftp ftp://username:password@your-ftp-server.com
进入交互界面后,使用put bigfile.zip或get bigfile.zip,传输时会自动显示百分比、速度和预计完成时间。如果想批量传,还可以结合mirror命令同步整个目录,进度依然可见。
脚本中监控FTP传输状态
有些自动化任务需要用脚本跑FTP,比如每天凌晨上传日志。这时候可以配合curl来实现进度监控。例如:
curl -T /path/to/localfile.txt -u username:password ftp://yourserver.com/remotedir/ --progress-bar
加上--progress-bar参数后,终端里就会显示进度条。如果是写shell脚本做定时任务,可以把进度信息重定向到日志文件,方便事后排查是否传完。
另一种方式是用Python的ftplib搭配回调函数。上传时每发送一块数据就触发一次回调,自己打印当前进度:
from ftplib import FTP
import os
def upload_with_progress(ftp, local_file, remote_file):
total_size = os.path.getsize(local_file)
uploaded = 0
def callback(data):
nonlocal uploaded
uploaded += len(data)
percent = (uploaded / total_size) * 100
print(f"上传进度: {percent:.1f}%", end="\r")
with open(local_file, 'rb') as f:
ftp.storbinary(f'STOR {remote_file}', f, 8192, callback)
# 使用示例
ftp = FTP('your-ftp-server.com')
ftp.login('username', 'password')
upload_with_progress(ftp, 'largefile.zip', 'largefile.zip')
ftp.quit()
这样每次传大文件时,终端就能实时刷新进度,哪怕在远程服务器上跑脚本也心里有数。
小技巧:别忽略服务器响应
有时候进度卡住不一定是网络问题,可能是服务器处理慢或权限异常。观察FTP客户端的日志窗口,通常能看到服务器返回的具体信息,比如“550 Permission denied”或者“Connection timeout”。这些提示比光看进度条更有价值。
另外,开启主动模式或被动模式(PASV)也可能影响传输稳定性。如果进度频繁中断,试着在客户端设置里切换模式看看。