数码工坊
白蓝主题五 · 清爽阅读
首页  > 数据备份

Shell脚本怎么写?用实例带你搞定数据备份

平时在公司做运维,或者自己搭了个NAS存照片视频,总得考虑数据安全。手动复制粘贴太累,一不小心还漏文件。这时候写个Shell脚本自动备份,省心又靠谱。

先搞清楚:Shell脚本是啥

简单说,Shell脚本就是把命令写进一个文件里,让系统一条条去执行。比如你每天要打包日志、拷贝到U盘、再发邮件通知,这些操作全都可以写成几行代码,定时跑就行。

写个最简单的备份脚本

假设你家里的树莓派上有个目录 /home/pi/photos 存着全家的照片,你想每天凌晨把它打包复制到移动硬盘 /mnt/backup 里。

先创建一个脚本文件:

#!/bin/bash
# 数据备份脚本

tar -czf /mnt/backup/photos_$(date +%Y%m%d).tar.gz /home/pi/photos

这行命令的意思是:用 tar 打包压缩 photos 目录,文件名带上今天的日期,存到备份盘里。每次运行都会生成一个新的压缩包,不会覆盖。

加上判断,避免出错

有时候U盘没插好,备份就失败了。可以加点逻辑判断:

#!/bin/bash

BACKUP_DIR="/mnt/backup"
SOURCE_DIR="/home/pi/photos"
TIMESTAMP=$(date +%Y%m%d)

if [ -d "$BACKUP_DIR" ]; then
    tar -czf "$BACKUP_DIR/photos_$TIMESTAMP.tar.gz" "$SOURCE_DIR"
    echo "备份完成:photos_$TIMESTAMP.tar.gz"
else
    echo "错误:未检测到备份设备"
    exit 1
fi

这样如果移动硬盘没挂载,脚本会提示错误并退出,不会乱打包到系统盘把空间撑爆。

让它自动跑起来

写完脚本存成 backup_photos.sh,给它执行权限:

chmod +x backup_photos.sh

然后用 crontab 设置每天凌晨两点自动执行:

0 2 * * * /home/pi/scripts/backup_photos.sh

只要设备通电联网,第二天醒来你就多了一份新备份。

实际用的时候注意点

脚本写好了别扔那儿就不管。头几次最好手动跑一下,看输出有没有报错。特别是路径别写错,/mnt/backup 写成 /mnt/backups 就可能创建空目录导致误判。

还有就是保留策略。时间久了备份越来越多,可以加一行删掉7天前的:

find $BACKUP_DIR -name "photos_*.tar.gz" -mtime +7 -delete

这样既能回溯历史数据,又不会把硬盘塞满。

其实Shell脚本没那么神秘,就是把你会敲的命令组织起来,让机器帮你重复干活。从最简单的开始试,慢慢加上条件判断、循环、日志记录,你会发现它比图形工具更灵活。