400-915-1135
维护运营详细

centos linux系统中用sshshell命令打包压缩某目录下的所有子目录,用于网站快速打包备份

发表日期:2026-09-14 10:33:37   作者来源:众诚企业建站   浏览:4

在  centos 系统  想把"/data/wwwroot"目录下的 所有子目录打包备份到"/www/backup",按"/data/wwwroot"目录下子目录名分别打包压缩包保存,tag命令

在 CentOS 系统中,你可以使用 tar 命令配合循环来实现这个需求。以下是几种实现方式:

方法一:使用 for 循环(推荐)

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"; done

方法三:不切换目录的写法

for 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"
done

恢复时解压

cd /data/wwwroot
tar -xzvf /www/backup/子目录名.tar.gz

提示: 如果 /www/backup 目录不存在,先执行 mkdir -p /www/backup 创建。



如没特殊注明,文章均为众诚网络原创,转载请注明来自https://www.94zc.com/weihu/350.html
上一篇: 宝塔面板服务器安全顶级设置
下一篇: 没有了!