在 centos 系统 想把"/data/wwwroot"目录下的 所有子目录打包备份到"/www/backup",按"/data/wwwroot"目录下子目录名分别打包压缩包保存,tag命令
在 CentOS 系统中,你可以使用 tar 命令配合循环来实现这个需求。以下是几种实现方式:
cd /data/wwwroot && for dir in */; do
dirname="${dir%/}"
tar -czvf "/www/backup/${dirname}_$(date +%Y%m%d).tar.gz" "$dirname"
done说明:
cd /data/wwwroot 进入源目录
*/ 匹配所有子目录
${dir%/} 去掉目录名末尾的 /
$(date +%Y%m%d) 添加日期后缀(可选)
cd /data/wwwroot && for d in */; do tar -czf "/www/backup/${d%/}.tar.gz" "$d"; donefor dir in /data/wwwroot/*/; do
name=$(basename "$dir")
tar -czvf "/www/backup/${name}.tar.gz" -C /data/wwwroot "$name"
done说明:
-C /data/wwwroot 指定打包时的相对路径基准目录
这样压缩包内不会包含 /data/wwwroot 完整路径
#!/bin/bash
SRC="/data/wwwroot"
DST="/www/backup"
DATE=$(date +%Y%m%d)
# 确保备份目录存在
mkdir -p "$DST"
cd "$SRC" || exit 1
for dir in */; do
[ -d "$dir" ] || continue
name="${dir%/}"
echo "正在打包: $name"
tar -czf "${DST}/${name}_${DATE}.tar.gz" "$name"
if [ $? -eq 0 ]; then
echo "✓ $name 打包成功"
else
echo "✗ $name 打包失败"
fi
done| 参数 | 含义 |
|---|---|
-c | 创建归档 |
-z | 使用 gzip 压缩 |
-v | 显示详细过程 |
-f | 指定归档文件名 |
-C | 切换到指定目录再执行 |
cd /data/wwwroot && for dir in */; do
name="${dir%/}"
[[ "$name" == "cache" || "$name" == "logs" ]] && continue
tar -czf "/www/backup/${name}.tar.gz" "$name"
donecd /data/wwwroot tar -xzvf /www/backup/子目录名.tar.gz
提示: 如果 /www/backup 目录不存在,先执行 mkdir -p /www/backup 创建。