在服务器上,最怕的就是:
- 服务器崩了
- 硬盘挂了
- 网站文件没备份
- 想恢复,发现啥都没有了……
- 宝塔等备份莫名没备份上全备份自己服务器上,硬盘爆了
为了解决「自己文件自己掌控」的问题,我们写了一个纯 Bash 的 FTP 自动备份与管理脚本,支持:
- 多 FTP 账号
- 多备份任务
- 定时自动备份
- 手动立即执行备份
- 浏览远程 FTP 目录
- 下载远程文件/目录到本地
- 删除远程文件/目录
- 一键卸载(连同配置 + crontab + 脚本本体)
📌 功能总览
| 功能 | 说明 |
|---|---|
| 多 FTP 账号 | 可以配置多个 FTP 账号,按需切换备份/管理 |
| 多备份任务 | 每个账号可绑定多个备份任务 |
| 定时备份 | 支持每天固定时间、每隔 N 分钟执行 |
| 立即执行 | 新建任务时可选择立即执行一次 |
| 远程浏览 | 在脚本中查看 FTP 远程目录结构 |
| 远程下载 | 可将远程文件/目录下载到指定本地目录(支持覆盖) |
| 远程删除 | 删除远程文件或整个目录(带确认提示) |
| 自动安装 | 支持 bash <(curl ...) 一键运行,自动保存脚本 |
| 自动卸载 | 一键清理配置、定时任务和脚本本体 |
兼容主流 Linux 发行版:Debian、Ubuntu、CentOS、AlmaLinux、Rocky 等,只要装得了 bash 和 lftp 基本都没问题。
⚡ 快速安装
在服务器上执行:
bash <(curl -L https://raw.githubusercontent.com/hiapb/ftp/main/back.sh)
脚本会自动:
- 检查依赖(
lftp、crontab等) - 如果发现是通过
<(curl ...)临时执行,会自动把当前脚本保存为:
/root/back.sh - 赋予执行权限,并在后续 crontab 中统一使用
/root/back.sh
之后你可以通过:
bash /root/back.sh
随时重新进入管理菜单。
🧭 主菜单功能说明
启动脚本后,你会看到类似界面:
=======================================
🌐 FTP 备份工具(多账号版)
=======================================
🔐 FTP 账号:已配置 X 个 ✅
1) 📂 管理 FTP 账号
2) ➕ 新建备份任务
3) 📋 查看/立即执行备份任务
4) 🗑 删除备份任务
5) 🧹 卸载
0) ❎ 退出
说明:
- 1)管理 FTP 账号:新增账号 / 查看 / 删除 / 远程操作
- 2)新建备份任务:设置本地路径 → FTP 目录 → 定时方式
- 3)查看/立即执行:列出所有定时任务,并可手动执行一次
- 4)删除备份任务:从 crontab 中删除某条定时任务
- 5)卸载:删除所有配置、定时任务和
/root/back.sh脚本本体 - 0)退出:退出脚本
注意:如果还没配置 FTP 账号,只能用 1 / 5 / 0,其它菜单会提醒你先添加账号。
🔐 FTP 账号管理
选择:
1) 📂 管理 FTP 账号
进入二级菜单:
=======================================
📂 FTP 账号管理
=======================================
当前账号数量:N
1) ➕ 新增 FTP 账号
2) 📋 查看 FTP 账号列表
3) 🗑 删除 FTP 账号
4) 🔍 使用账号浏览/下载/删除远程文件
0) ⬅ 返回主菜单
1️⃣ 新增 FTP 账号
选择 1:
- 账号名称(自定义别名,如
main、backup1,内部用作配置文件名) - FTP 主机(如
ftp.example.com) - FTP 端口(默认 21)
- FTP 用户名
- FTP 密码(明文输入,方便看清是否输错)
账号会保存为:
~/.ftp_backup_tool/accounts/账号名.conf
配置示例:
ACCOUNT_ID="main"
FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USER="myftpuser"
FTP_PASS="mypassword"
2️⃣ 查看 FTP 账号列表
选择 2:
会列出所有账号,例如:
[1] 账号名:main | 主机:ftp.example.com | 用户:myftpuser
[2] 账号名:bbr | 主机:ftp3.hostypanel.com | 用户:xxx
3️⃣ 删除 FTP 账号(会清理其相关任务)
选择 3:
- 先列出账号列表
- 输入编号确认
- 再确认是否删除
被删除账号对应的所有备份任务(在 crontab 中带 # FTP_BACKUP[account_id] 标记)也会自动一并移除。
4️⃣ 使用账号浏览 / 下载 / 删除远程文件
选择 4:
首先选择一个账号,然后进入远程操作菜单。
🌍 使用账号浏览 / 下载 / 删除远程文件
选定账号后,会看到:
=======================================
🔍 FTP 远程浏览 / 下载 / 删除
=======================================
当前账号:ACCOUNT_ID (user@host:port)
1) 📁 列出某个远程目录内容
2) 📥 下载远程文件到本地
3) 📥 下载远程目录到本地
4) ❌ 删除远程文件
5) ⚠️ 删除远程目录
0) ⬅ 返回上一层
1️⃣ 列出某个远程目录内容
示例:
📂 请输入要查看的远程目录(例如 / 或 /backup/www): /
📋 / 下的内容:
────────────────────────────────
drwxr-xr-x 2 ftp ftp 33 Oct 27 22:07 board_email
drwxr-xr-x 4 ftp ftp 46 Nov 11 10:30 clodom
...
────────────────────────────────
脚本自动过滤掉 . 和 .. 两个无意义目录,只显示真实内容。
2️⃣ 下载远程文件到本地(支持覆盖)
比如想把 /test/index.php 下载到服务器 /root/downloads:
- 远程目录:
/test - 文件名:
index.php - 本地目录:
/root/downloads
脚本流程:
- 自动
mkdir -p /root/downloads - 使用
get下载文件到本地,同名文件会被覆盖 - 下载前有确认提示
用途:
- 快速从 FTP 同步配置文件到本地
- 修改远程文件前,先拉一份本地备份
- 从网站目录拉代码回来调试
3️⃣ 下载远程目录到本地
例如想把远程 /test 目录完整拉到本地 /root/test_bak:
- 远程目录:
/test - 本地目录:
/root/test_bak
使用 lftp mirror 命令:
- 会同步远程目录里的所有文件/子目录到本地
- 本地已有同名文件会根据 mirror 规则覆盖
适合:
- 备份整站源码到服务器本地
- 从 FTP 反向同步一份完整数据到 VPS 本地
4️⃣ 删除远程文件
- 指定目录 + 文件名
- 删除前会有
(y/N)二次确认
例如:
- 远程目录:
/test - 文件名:
old.log
最终删除 /test/old.log。
5️⃣ 删除远程目录(整目录)
- 指定目录,如
/test - 操作前会有警告提示
- 使用
rm -r递归删除
只会删除你指定的这个目录,不会去模糊匹配所有叫 test 的路径。
💾 新建备份任务(本地 → FTP)
回到主菜单选择:
2) ➕ 新建备份任务
流程如下:
-
输入本地路径(文件或目录)
- 如果不存在,会反复提示重新输入
- 不允许路径中带空格(避免转义问题)
-
输入 FTP 目标目录,例如:
/backup/www/site_baktest(会当作相对路径)
- 选择 FTP 账号(会列出账号给你选编号)
-
选择定时方式:
1) 每天固定时间备份- 输入小时(0–23)和分钟(0–59)
- 内部会写入 crontab 形如:
M H * * * ...
2) 每隔 N 分钟备份- 输入 N(1–59)
- 内部写入:
*/N * * * * ...
- 确认后,脚本会生成 crontab 定时任务,并显示完整行内容。
-
最后会询问:
⚡ 是否立即执行一次此备份任务?(Y/n):默认回车为
Y,会立刻执行一次备份。
备份逻辑简述
- 如果本地是目录:
使用lftp mirror -R递归上传目录结构:mirror -R "本地目录" "远程目录" - 如果本地是文件:
使用put上传单文件到远程目录:put "本地文件" -o "远程文件名"
⏰ 查看 / 立即执行备份任务
主菜单:
3) 📋 查看/立即执行备份任务
功能:
- 从 crontab 中过滤出所有带
# FTP_BACKUP[...]标记的行 - 按编号展示
- 可选择其中一个任务立即执行一次(不改动其定时设置)
适合:
- 新改了本地文件,想马上推送一次
- 排查任务是否配置正确
🗑 删除备份任务
主菜单:
4) 🗑 删除备份任务
步骤:
- 列出所有备份任务(crontab 中的对应行)
- 输入任务编号
- 该行会从 crontab 中删除
不会影响 FTP 账号配置。
🧹 卸载工具(含脚本本体)
主菜单:
5) 🧹 卸载
功能:
- 删除所有包含
# FTP_BACKUP的定时任务 - 删除配置目录:
~/.ftp_backup_tool/ - 删除脚本本体:
/root/back.sh(或实际安装路径SCRIPT_PATH) - 输出提示后自动
exit 0
也就是说,卸载后系统上不再残留任何相关文件,想重装就再运行一次:
bash <(curl -L https://raw.githubusercontent.com/hiapb/ftp/main/back.sh)
✅ 使用建议与小技巧
- 建议本地备份目录路径尽量简单,例如:
/root/agent.sh、/root/site、/data/wwwroot - 由于目前不支持路径中带空格,如有需要可以先创建软链接:
ln -s "/path/with space" /root/path_nospace - 建议不同的 FTP 用途配不同账号,例如:
web_backup:网站源码备份db_backup:数据库定时导出后备份config_backup:配置文件
- 可以配合 crontab 把数据库先导出到本地,再由脚本上传到 FTP,例如:
- 定时
mysqldump输出到/root/db_bak/db.sql - 再由本脚本把
/root/db_bak上传到 FTP
- 定时
🎉 总结
通过这个脚本,你可以非常方便地做到:
- 本地 → FTP 自动备份(支持多任务、多账号)
- FTP → 本地 下载文件 / 整个目录(镜像)
- 在终端就能浏览和清理 FTP 目录
- 安装简单,卸载干净利落
算是一个「能自己养活自己」的小型备份 & 管理系统,非常适合:
- 个人 VPS 用户
- 小站长 / 博客主
- 习惯 FTP 同步的网站环境
希望这个脚本可以慢慢养成你的「全家桶备份管理工具」。

刀客9 天前
发表在:Wipter - 全网首发 - 批量多开放大 - 保姆级教程!@ysbg:官方是游戏规则定制者
ysbg9 天前
发表在:Wipter - 全网首发 - 批量多开放大 - 保姆级教程!为什么要检测多开?我觉得没有意义呀,因为...
刀客22 天前
发表在:被Ban的Office-E5迎来救赎 | 新的希望 | 100GB-Outlook 和 5TB-OneDrive@pipi:哈哈
pipi22 天前
发表在:被Ban的Office-E5迎来救赎 | 新的希望 | 100GB-Outlook 和 5TB-OneDrive不错不错,按照教程搞了个E3
刀客1 个月前
发表在:[装死,目测跑路]挂机网赚 - Earn.Cc@清风:近期会整理一期文章发布
清风1 个月前
发表在:[装死,目测跑路]挂机网赚 - Earn.Cc希望刀哥把利润高的标注一下谢谢
刀客2 个月前
发表在:[装死,目测跑路]挂机网赚 - Earn.Cc@清风:好的.感谢支持
清风2 个月前
发表在:[装死,目测跑路]挂机网赚 - Earn.Cc谢谢刀哥哈哈纯净的住宅IP没问题遇到垃圾...
刀客2 个月前
发表在:挂机网赚 - ProxyLite@清风:可以的 封号的话 比较看脸了...
清风3 个月前
发表在:挂机网赚 - ProxyLite你好刀哥,请问这些挂机项目可以用买的住宅...