平时在公司做运维,或者自己搭了个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脚本没那么神秘,就是把你会敲的命令组织起来,让机器帮你重复干活。从最简单的开始试,慢慢加上条件判断、循环、日志记录,你会发现它比图形工具更灵活。