做前端开发或者运维,经常要往测试服务器、内网环境或者客户机器上扔新版本的文件——比如把打包好的 dist/ 目录丢到 Nginx 的静态目录下,或者把配置文件更新到指定路径。手动拖拽、WinSCP 上传、再 chmod 权限……重复十次就想砸键盘。其实写个几行的部署脚本,一键复制文件,5 秒完成。
最简单的场景:本地复制到本地
比如你刚 npm run build 完,想把生成的 dist/ 整个目录拷到项目根目录下的 release/ 备份:
cp -r dist/ release/
Windows 用户可以用 PowerShell(不用装额外工具):
Copy-Item -Path "dist\*" -Destination "release\" -Recurse -Force
往远程服务器传文件?ssh + scp 就够用
假设你的测试服务器 IP 是 192.168.1.100,目标路径是 /var/www/myapp/,账号叫 deploy:
scp -r dist/* deploy@192.168.1.100:/var/www/myapp/
如果提示权限拒绝,先确认目标目录存在且用户有写入权限;也可以加 -o StrictHostKeyChecking=no 跳过首次连接确认(适合自动化)。
再进一步:带清理、带日志的简易部署脚本
新建一个 deploy.sh 放在项目根目录:
#!/bin/bash
# 定义变量
SOURCE="dist/"
TARGET="deploy@192.168.1.100:/var/www/myapp/"
LOG="deploy_$(date +%Y%m%d_%H%M).log"
echo "【开始部署】$(date)" > $LOG
echo "→ 清理远端旧文件..." | tee -a $LOG
ssh $TARGET "rm -rf /var/www/myapp/*" 2>&1 | tee -a $LOG
echo "→ 复制新文件..." | tee -a $LOG
scp -r $SOURCE $TARGET 2>&1 | tee -a $LOG
echo "✅ 部署完成,日志已保存为 $LOG"
给它执行权限:chmod +x deploy.sh,以后只要运行 ./deploy.sh 就自动清空+覆盖+记日志。
小提醒
· 如果文件里有敏感配置(比如 .env),千万别直接复制过去,建议用模板+替换方式;
· Windows 用户如果常用 Git Bash,里面自带 scp 和 ssh,不用装 PuTTY;
· 复制大文件时加 -v 参数(如 scp -rv)能看到进度,心里不慌。