Linux 子目录分离备份与解压自动化脚本 📂
本文介绍两个实用的自动化脚本:directory_backup.sh
和 directory_extract.sh
,它们分别用于目录备份和解压操作。这些脚本采用免交互设计,非常适合集成到自动化运维流程或定时任务中,能够显著提高文件管理效率。✨
📋 导航目录
📚 脚本简介
本文介绍两个实用的自动化脚本:directory_backup.sh
和 directory_extract.sh
,它们分别用于目录备份和解压操作。这些脚本采用免交互设计,非常适合集成到自动化运维流程或定时任务中,能够显著提高文件管理效率。✨
无论是系统管理员需要定期备份重要数据,还是开发人员需要快速部署环境,这两个脚本都能提供简单而强大的解决方案。它们支持多种压缩格式,具有详细的执行日志和错误报告,让用户随时了解操作状态。
一、⚙️ 备份脚本功能与特点
directory_backup.sh
是一个专业的目录备份工具,具有以下突出特点:
- 🎯 自动化备份:一键指定备份目录下的所有非隐藏子目录,无需人工干预
- 📁 智能压缩:每个子目录单独压缩为
.tar.gz
文件,保持结构清晰
- 🔄 自动覆盖:免交互设计自动覆盖已存在的备份文件,适合自动化任务
- ⏰ 日期标记:备份文件名格式为
目录名-YYYY-MM-DD-HH-MM-SS.tar.gz
,便于版本管理
- 👁️ 透明操作:提供详细的执行日志,实时显示备份进度和结果
- 🚫 智能过滤:自动跳过隐藏目录(以
.
开头的目录),避免不必要的备份
该脚本特别适合需要定期备份数据的场景,如网站数据备份、配置文件备份或项目版本存档等。🔒
二、📦 解压脚本功能与特点
directory_extract.sh
是一个多功能解压工具,具有以下核心功能:
- 🔓 多格式支持:全面支持
.tar.gz
, .tgz
, .tar
, .zip
, .gz
等多种压缩格式
- 📂 批量处理:自动遍历当前目录下的所有压缩包,一次性完成解压操作
- 🏗️ 自动创建:如果目标目录不存在,会自动创建所需目录结构
- 📊 详细报告:显示每个文件的解压状态和最终统计结果,一目了然
- 🛡️ 错误处理:具备完善的错误处理机制,单个文件失败不影响其他操作
- 🔍 智能识别:正确处理复合扩展名(如
.tar.gz
),避免重复解压问题
无论是从备份恢复数据,还是处理下载的压缩包集合,这个脚本都能大大简化工作流程。📤
三、🚀 使用方法
1. 🌐 远程执行方式(压缩与解压)
最简单的方法是直接通过远程URL执行脚本,无需下载:
📦 远程压缩操作
- 基本命令格式
bash ~/directory_backup.sh <源目录> <备份目录> [保留数量]
- 备份目录下仅保留按
子目录名_时间戳.tar.gz
命名的压缩包,每个对应源目录
下的一轮 子目录
备份。
1
|
bash <(curl -sL script.meimolihan.eu.org/sh/backup/directory_backup.sh) /mnt/test1 /mnt/test2/ 5
|
1
|
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/backup/directory_backup.sh) /mnt/test1 /mnt/test2/ 5
|
📤 远程解压操作
1
2
3
4
|
# 切换到需要解压文件目录并执行解压到指定目录
cd /mnt/test2 && \
bash <(curl -sL script.meimolihan.eu.org/sh/backup/directory_extract.sh) /mnt/test3/ && \
tree /mnt/test3
|
1
2
3
4
|
# 切换到需要解压文件目录并执行解压到指定目录
cd /mnt/test2 && \
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/backup/directory_extract.sh) /mnt/test3/ && \
tree /mnt/test3
|
2. 💻 本地执行方式(压缩与解压)
如果需要频繁使用,可以下载脚本到本地:
📦 本地压缩操作
- 基本命令格式
bash ~/directory_backup.sh <源目录> <备份目录> [保留数量]
- 备份目录下仅保留按
子目录名_时间戳.tar.gz
命名的压缩包,每个对应源目录
下的一轮 子目录
备份。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 下载备份脚本
wget -c https://gitee.com/meimolihan/script/raw/master/sh/backup/directory_backup.sh
# 赋予执行权限
chmod +x directory_backup.sh
# 解决可能存在的换行符问题(如果需要)
sudo apt install dos2unix
dos2unix directory_backup.sh
# 切换到需要备份的目录并执行备份到指定目录
bash directory_backup.sh /mnt/test1 /mnt/test2 5 && \
ls /mnt/test2
|
📤 本地解压操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 下载解压脚本
wget -c https://gitee.com/meimolihan/script/raw/master/sh/backup/directory_extract.sh
# 赋予执行权限
chmod +x directory_extract.sh
# 解决可能存在的换行符问题(如果需要)
sudo apt install dos2unix
dos2unix directory_extract.sh
# 执行脚本
# 切换到需要解压文件目录并执行解压到指定目录
cd /mnt/test2 && \
/mnt/directory_extract.sh /mnt/test3 && \
tree /mnt/test3
|
解压脚本的使用方法类似,只需替换相应的脚本名称和URL即可。
四、🔍 测试压缩与解压
- 以下是一个完整的测试流程,展示如何使用这两个脚本进行压缩和解压操作:
🧪 1. 创建测试文件
1
2
3
4
5
6
|
mkdir -p /mnt/{test1,test2,test3} && \
mkdir -p /mnt/test1/{aaa,bbb,ccc} && \
echo "测试文件内容" > /mnt/test1/aaa/test1.txt && \
echo "另一个测试文件" > /mnt/test1/bbb/test2.txt && \
echo "第三个测试文件" > /mnt/test1/ccc/test3.txt && \
tree /mnt/test1 /mnt/test2 /mnt/test3
|
1
2
3
4
5
6
7
8
9
10
|
root@debian13 / # tree /mnt/test1 /mnt/test2 /mnt/test3
/mnt/test1
├── aaa
│ └── test1.txt
├── bbb
│ └── test2.txt
└── ccc
└── test3.txt
/mnt/test2
/mnt/test3
|
🧪 2. 测试 压缩
1
|
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/backup/directory_backup.sh) /mnt/test1 /mnt/test2 5 && tree /mnt/test1 /mnt/test2 /mnt/test3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@debian13 / # tree /mnt/test1 /mnt/test2 /mnt/test3
/mnt/test1
├── aaa
│ └── test1.txt
├── bbb
│ └── test2.txt
└── ccc
└── test3.txt
/mnt/test2
├── aaa_20250916_192217.tar.gz
├── bbb_20250916_192217.tar.gz
└── ccc_20250916_192217.tar.gz
/mnt/test3
|
🧪 3. 测试解压
1
2
3
|
cd /mnt/test2 && \
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/backup/directory_extract.sh) /mnt/test3/ && \
tree /mnt/test1 /mnt/test2 /mnt/test3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
root@debian13 ~ # tree /mnt/test1 /mnt/test2 /mnt/test3
/mnt/test1
├── aaa
│ └── test1.txt
├── bbb
│ └── test2.txt
└── ccc
└── test3.txt
/mnt/test2
├── aaa_20250916_191032.tar.gz
├── bbb_20250916_191032.tar.gz
└── ccc_20250916_191032.tar.gz
/mnt/test3
├── aaa
│ └── test1.txt
├── bbb
│ └── test2.txt
└── ccc
└── test3.txt
|
🧪 4. 删除测试文件
1
2
3
|
cd .. && \
rm -rf /mnt/test1 /mnt/test2 /mnt/test3 && \
ls /mnt
|
这个测试流程展示了:
- 创建测试目录结构和文件
- 使用备份脚本将目录压缩为多个tar.gz文件
- 使用解压脚本将这些压缩包解压到目标目录
- 验证解压结果是否正确
通过这个完整的测试流程,您可以确保脚本正常工作,并且理解整个压缩和解压的过程。🧪
五、🔧 脚本功能概括
directory_backup.sh
- 核心功能:自动化备份当前工作目录下的所有非隐藏子目录
- 备份格式:每个子目录压缩为单独的
目录名-YYYY-MM-DD.tar.gz
文件
- 适用场景:定期自动化备份、系统定时任务、脚本集成和批处理操作
- 核心功能:自动解压当前目录下的所有压缩包到指定目录
- 支持格式:
.tar.gz
, .tgz
, .tar
, .zip
, .gz
- 适用场景:从备份恢复数据、批量处理下载的压缩包、环境部署
六、⏰ 定时任务设置
设置定时自动备份
1
2
3
4
5
6
7
8
9
10
11
12
|
# 编辑当前用户的crontab
crontab -e
# 添加以下任务示例:
# 每天凌晨2点执行备份,保留7个备份
0 2 * * * bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/backup/directory_backup.sh) /mnt/test2/ /mnt/test2/ 7
# 每周日凌晨1点执行备份,保留4个备份
0 1 * * 0 /path/to/universal_backup.sh /home/user/documents /mnt/backup 4
# 每6小时执行一次备份
0 */6 * * * /path/to/universal_backup.sh /important/data /backups 10
|
日志记录配置
1
2
3
4
5
|
# 将输出同时记录到日志文件
0 2 * * * /path/to/universal_backup.sh /var/www/html /backups 7 >> /var/log/backup.log 2>&1
# 只记录错误信息
0 2 * * * /path/to/universal_backup.sh /var/www/html /backups 7 > /dev/null 2>> /var/log/backup-error.log
|
七、💡 使用场景与建议
常见使用场景
- 🔄 定期数据备份:结合cron定时任务,定期备份重要数据
- 🚚 项目部署:快速解压多个组件包到指定目录
- 📦 数据迁移:将数据打包后迁移到新服务器或新位置
- 🛡️ 版本归档:定期创建项目或数据的版本快照
实用建议
- 🔐 权限管理:确保运行脚本的用户有足够的读写权限
- 💾 空间检查:在执行备份前检查目标磁盘空间是否充足
- 📝 日志监控:关注脚本输出,及时发现和处理错误
- 🔄 测试验证:首次使用前在小范围测试,验证脚本行为符合预期
- ⏰ 定时任务:使用cron等工具设置定期自动执行备份任务
高级技巧
- 结合其他工具(如rsync)实现增量备份
- 使用脚本返回值(exit code)在自动化流程中判断执行结果
- 通过重定向输出保存执行日志:
./script.sh /backup/dir > backup.log 2>&1
这两个脚本虽然简单,但功能强大,能够满足大多数日常备份和解压需求。通过合理使用,可以显著提高工作效率并减少人为错误。🎯
如有问题或建议,欢迎反馈!希望这些脚本能为您的工作带来便利。 😊