Ubuntu 下 FileZilla 自动化实践
一 能力与边界
二 方案一 使用 FileZilla 队列与宏脚本实现半自动
#!/usr/bin/env bash
set -e
FILEZILLA="/usr/bin/filezilla"
SITE_NAME="prod-ftp" # 站点管理器中的站点名称
QUEUE_FILE="$HOME/.config/filezilla/Queue.xml" # 队列文件路径(不同版本可能不同)
LOG_FILE="$HOME/filezilla-auto-$(date +%F_%H%M%S).log"
if [[ ! -x "$FILEZILLA" ]]; then
echo "未找到 FileZilla 可执行文件:$FILEZILLA" >&2
exit 1
fi
# 简单方式:直接启动并让用户在图形界面执行“处理队列”
# 进阶方式:结合 xdotool/AutoKey 等自动化工具模拟按键(不跨桌面/锁屏,稳定性受限)
echo "$(date): 启动 FileZilla 并加载站点 [$SITE_NAME]" >> "$LOG_FILE"
nohup "$FILEZILLA" -c "$SITE_NAME" >> "$LOG_FILE" 2>&1 &
# 如需无人值守,请改用 lftp/rsync 等命令行工具(见方案二)
三 方案二 使用脚本调用命令行工具实现全自动
#!/usr/bin/env bash
set -e
LFTP="/usr/bin/lftp"
HOST="ftp.example.com"
USER="deploy"
PASS="s3cr3t"
PORT=21
REMOTE_DIR="/var/www/html"
LOCAL_DIR="$HOME/build"
"$LFTP" -u "$USER","$PASS" -p "$PORT" "$HOST" <<'EOF'
set ftp:ssl-force true
set ftp:ssl-protect-data true
mirror -R --delete --verbose "$LOCAL_DIR" "$REMOTE_DIR"
bye
EOF
#!/usr/bin/env bash
set -e
RSYNC="/usr/bin/rsync"
SSH_KEY="$HOME/.ssh/id_rsa_deploy"
USER="deploy"
HOST="sftp.example.com"
REMOTE_DIR="/var/www/html"
LOCAL_DIR="$HOME/build"
"$RSYNC" -avz --delete -e "ssh -i $SSH_KEY -o StrictHostKeyChecking=no" \
"$LOCAL_DIR/" "$USER@$HOST:$REMOTE_DIR/"
# 编辑定时任务
crontab -e
# 每天 02:30 执行
30 2 * * * /usr/bin/flock -n /tmp/filezilla-auto.lock /path/to/your-script.sh >> /var/log/filezilla-auto.log 2>&1
四 常见问题与网络配置要点