SHARE_【打包】【恢复】_tar元数据备份恢复_文件系统ext4_btrfs_ntfs

SHARE_【打包】【恢复】_tar元数据备份恢复_文件系统ext4_btrfs_ntfs

=====================================

### 完整打包命令(直接复制运行)
```bash
SRC="/media/kapokf/SHARE";DST="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done
```

---
1. 变量定义 SRC / DST
定义源目录、备份输出目录
SRC="/media/ubunto/SHARE1/batocera"  # 打包根目录(只处理它下面的一级子文件夹)
DST="/media/ubunto/LEROMS1/yuanshuju-bak2" # tar包存放目录
===========================================
---------------------------------------------------------------------------------------------------------------
=========================================================
### 完整恢复命令(带实际路径,直接复制运行)
```bash
SRC_BAK="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";RESTORE_DIR="/media/kapokf/SHARE";sudo mkdir -p "$RESTORE_DIR";for f in "$SRC_BAK"/*.tar;do n=$(basename "$f" .tar);size=$(stat -c%s "$f");echo "正在恢复: $n";pv -s "$size" "$f" | sudo tar -xf - -C "$RESTORE_DIR";done
```
- 备份源(tar包存放处):`/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01`
- 恢复目标(解压到的目录):`/media/kapokf/SHARE`
====================================
备份源(tar包存放处):/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01/SHARE_tar
恢复目标(解压到的目录):/media/kapokf/CACHE1
SRC_BAK="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01/SHARE_tar";RESTORE_DIR="/media/kapokf/CACHE1";sudo mkdir -p "$RESTORE_DIR";for f in "$SRC_BAK"/*.tar;do n=$(basename "$f" .tar);size=$(stat -c%s "$f");echo "正在恢复: $n";pv -s "$size" "$f" | sudo tar -xf - -C "$RESTORE_DIR";done
```

----------------------------------------------------------------------------
===========================================================================
---------------------------------------------------------------
===========================================================================

SHARE_【打包】【恢复】_tar元数据备份恢复_文件系统ext4_btrfs_ntfs


========================================
打包源目录 SRC:/media/ubunto/SHARE1
这里面的所有子文件夹,要自动打包
打包输出目录 DST:/media/ubunto/LEROMS1
打包好的所有xxx.tar全部存到这里
自动跳过不打包:rom1s、rom2s、rom3s

==【SRC="/media/ubunto/SHARE1/batocera";DST="/media/ubunto/LEROMS1/yuanshuju-bak2";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done】
==================================================
打包目录:/media/kapokf/SHARE
保存路径:/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01
==【SRC="/media/kapokf/SHARE";DST="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done】
==================================================
=========================================================

### 完整打包命令(直接复制运行)
```bash
SRC="/media/kapokf/SHARE";DST="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done
```

---
1. 变量定义 SRC / DST
定义源目录、备份输出目录
SRC="/media/ubunto/SHARE1/batocera"  # 打包根目录(只处理它下面的一级子文件夹)
DST="/media/ubunto/LEROMS1/yuanshuju-bak2" # tar包存放目录
===========================================






### 命令用途
批量把源目录下的**所有一级子文件夹**,逐个打成独立的 `.tar` 包,存到指定备份目录;自动跳过 rom1s、rom2s、rom3s 三个文件夹;打包全程显示进度、速度和剩余时间。

---

### 运行前提
1. 必须先安装进度条工具 `pv`,否则会报错「找不到命令」:
```bash
sudo apt update && sudo apt install -y pv
```
2. 命令自带 `sudo` 管理员权限,执行时输入用户密码即可,适配 `/media` 下外接硬盘的读写权限要求。

---

### 逐段功能说明(从左到右)
整条命令用 `;` 分隔多个步骤,依次执行:
1. `SRC="..."`:定义**源目录**,所有待打包的子文件夹都放在这个路径下
2. `DST="..."`:定义**输出目录**,打包好的所有 `.tar` 文件都会存在这里
3. `sudo mkdir -p "$DST"`:自动创建输出目录,不存在就新建,已存在也不报错
4. `for d in "$SRC"/*/; do ... done`:循环遍历源目录下的所有一级子文件夹,逐个打包;只匹配文件夹,不会打包零散的单独文件
5. `n=$(basename "$d")`:提取当前文件夹的纯名称,用来给生成的 tar 包命名
6. `[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue`:过滤规则,遇到这三个文件夹直接跳过,不打包
7. `size=$(du -sb "$d" | awk '{print $1}')`:计算当前文件夹总大小,给进度条工具做百分比计算用
8. **核心打包流水线**(用管道 `|` 依次传递数据):
- `tar -cf -`:创建无压缩 tar 包,数据流直接输出到管道,不生成临时文件
- `-C "$SRC"`:切换工作目录,保证解压后直接是文件夹,不带长长的路径前缀
- `pv -s "$size"`:实时显示打包进度、传输速度、剩余时间
- `tee "$DST/$n.tar"`:把数据流写入最终的 tar 备份文件
- `> /dev/null`:屏蔽多余输出,防止二进制数据刷屏乱码

---

### 自定义修改方法(保存后按需改)
- 改打包路径:修改 `SRC=` 和 `DST=` 引号里的路径即可
- 改跳过的文件夹:修改第6步里的文件夹名称,可自由增删
- 改成压缩打包:把 `tar -cf` 改成 `tar -zcf`,变为 gzip 压缩格式,体积更小,速度变慢
- 不需要进度条:删掉 `| pv -s "$size"` 这段,不用装 pv 也能运行



========================================================

### 完整恢复命令(带实际路径,直接复制运行)
```bash
SRC_BAK="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";RESTORE_DIR="/media/kapokf/SHARE";sudo mkdir -p "$RESTORE_DIR";for f in "$SRC_BAK"/*.tar;do n=$(basename "$f" .tar);size=$(stat -c%s "$f");echo "正在恢复: $n";pv -s "$size" "$f" | sudo tar -xf - -C "$RESTORE_DIR";done
```
- 备份源(tar包存放处):`/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01`
- 恢复目标(解压到的目录):`/media/kapokf/SHARE`

---

### 命令用途
批量遍历备份目录里的全部 `.tar` 包,逐个解压还原到目标目录,解压后目录结构和打包前完全一致;全程显示解压进度、速度和剩余时间,是之前批量打包命令的反向操作。

---

### 运行前提
1. 需提前安装进度条工具 `pv`,已安装过无需重复执行:
```bash
sudo apt update && sudo apt install -y pv
```
2. 命令自带 `sudo` 管理员权限,适配 `/media` 外接硬盘的读写权限要求。

---

### 逐段功能说明
整条命令用分号 `;` 分隔步骤,依次执行:
1. `SRC_BAK="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01"`
定义**备份源目录**:所有待恢复的 tar 包都存放在这个路径下,修改路径只改引号内内容。
2. `RESTORE_DIR="/media/kapokf/SHARE"`
定义**恢复目标目录**:所有 tar 包都会解压到这个目录下,修改恢复位置只改引号内内容。
3. `sudo mkdir -p "$RESTORE_DIR"`
自动创建恢复目标目录,不存在就新建,已存在也不会报错。
4. `for f in "$SRC_BAK"/*.tar; do ... done`
循环结构:遍历备份源目录下的所有 `.tar` 文件,逐个执行解压。
5. `n=$(basename "$f" .tar)`
提取 tar 包的纯名称(去掉 `.tar` 后缀),对应原本的文件夹名。
6. `size=$(stat -c%s "$f")`
获取当前 tar 包的总字节大小,传给 pv 工具计算解压完成百分比。
7. `echo "正在恢复: $n"`
在终端打印当前正在恢复的文件夹名,方便查看当前进度。
8. `pv -s "$size" "$f" | sudo tar -xf - -C "$RESTORE_DIR"`
核心解压流水线,用管道 `|` 传递数据:
- `pv -s "$size" "$f"`:读取 tar 文件,实时显示解压进度、传输速度、剩余时间
- `tar -xf -`:从管道读取数据流,执行解压操作
- `-C "$RESTORE_DIR"`:指定解压输出位置,保证文件还原到目标目录,结构和打包前完全一致

---

### 关键注意事项
1. 解压后会在目标目录生成与打包前同名的文件夹,内部层级结构完整还原;
2. 默认是覆盖式恢复:目标目录已有同名文件会被直接覆盖,不会清空目录内原有其他文件;如需纯净恢复,请先手动删除目标目录内的旧文件;
3. 若之前打包时使用了 gzip 压缩(命令是 `tar -zcf`),需把本条命令里的 `tar -xf` 改为 `tar -zxf`;
4. 只需修改 `SRC_BAK` 和 `RESTORE_DIR` 两个变量的路径,即可适配不同目录的恢复需求。







================================================

解压还原

然后运行这条真正带进度条、速度、剩余时间的命令:
====【SRC="/media/ubunto/LEROM1S/yuanshuju-btrfs-bakok";DST="/media/ubunto/SHARE2";sudo mkdir -p "$DST";for t in "$SRC"/*.tar;do echo "=== 解压:$t ===";sudo pv "$t" | sudo tar -xf - -C "$DST" --overwrite;done 】===============



=====================================
方案 2:不想装 pv,修改脚本去掉 pv,无进度条静默备份
改动说明:删掉了 pv -s "$size" | 这一段,不再计算目录大小、不显示进度,纯后台打包。
直接复制这条替换执行:

SRC="/media/kapokf/SHARE";DST="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;sudo tar -cf - -C "$SRC" "$n" | sudo tee "$DST/$n.tar" > /dev/null;done
================================================================================
# 一、完整命令拆分解析(通用模板,两套示例一并说明)
## 通用完整脚本模板(可直接改路径复用)
```bash
# 1. 定义源目录、备份输出目录
SRC="/media/ubunto/SHARE1/batocera"
DST="/media/ubunto/LEROMS1/yuanshuju-bak2"

# 2. 自动创建备份文件夹(不存在就新建,存在不报错)
sudo mkdir -p "$DST"

# 3. 循环遍历源目录下所有一级子文件夹
for d in "$SRC"/*/;
do
# 获取当前循环文件夹的纯目录名(去掉完整路径,只留文件夹名)
n=$(basename "$d")

# 判断:如果文件夹是 rom1s / rom2s / rom3s,直接跳过不打包
[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue

# 计算当前文件夹总字节大小,传给pv做进度条预估
size=$(du -sb "$d" | awk '{print $1}')

# 核心打包流水线
sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null
done
```

## 单行压缩版(你平时直接复制终端运行的版本)
```bash
SRC="/media/ubunto/SHARE1/batocera";DST="/media/ubunto/LEROMS1/yuanshuju-bak2";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done
```

# 二、逐段详细拆解讲解
## 1. 变量定义 `SRC / DST`
```bash
SRC="/media/ubunto/SHARE1/batocera"  # 打包根目录(只处理它下面的一级子文件夹)
DST="/media/ubunto/LEROMS1/yuanshuju-bak2" # tar包存放目录
```
- 后续只需要修改这两个引号内的路径,就能适配不同硬盘目录,复用脚本

## 2. `sudo mkdir -p "$DST"`
- `-p` 关键作用:目标文件夹**不存在则自动创建,已存在不会报错**,避免打包因目录缺失中断

## 3. 循环遍历 `for d in "$SRC"/*/`
- `$SRC/*/`:匹配源目录下**所有带斜杠的条目**,只抓取一级子文件夹,自动过滤文件(不会单独打包零散文件)

## 4. `n=$(basename "$d")`
例:`$d=/media/ubunto/SHARE1/batocera/gameA/`
执行后 `n=gameA`
作用:剥离完整路径,只保留文件夹名称,用来生成 `gameA.tar` 备份包名

## 5. 跳过过滤逻辑 `[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue`
- `continue`:直接结束本次循环,跳过当前文件夹,不执行后面打包逻辑
- 效果:rom1s、rom2s、rom3s 三个目录全程忽略,不生成对应的tar包

## 6. `size=$(du -sb "$d" | awk '{print $1}')`
- `du -sb`:计算文件夹**总字节数**(包含全部子文件、隐藏文件)
- `awk '{print $1}'`:只提取纯数字大小,过滤输出里的路径文字
- 作用:把文件夹总容量传给`pv`进度工具,用来显示精确打包百分比、传输速度

## 7. 核心打包管道(整条流水线重点)
```bash
sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null
```
分段拆解管道 `|` 流转顺序:
1. `tar -cf - -C "$SRC" "$n"`
- `-c`:创建新tar包
- `-f -`:不生成本地临时文件,把打包数据流输出到标准管道
- `-C "$SRC"`:切换工作目录到SRC,打包后解压不会带完整前缀路径
2. `pv -s "$size"`
- pv是进度条工具,`-s` 指定总字节大小,终端实时输出:完成百分比、打包速度、剩余时间
- 缺失pv会直接报错,安装命令:`sudo apt install pv`
3. `sudo tee "$DST/$n.tar"`
- 将tar数据流写入目标路径 `DST/文件夹名.tar`,生成备份文件
4. `> /dev/null`
- 屏蔽tee默认输出到终端的原始二进制数据流,防止刷屏乱码

# 三、两套现成可直接复制的成品命令(分类保存)
## 模板1:ubunto SHARE1 打包脚本
```bash
SRC="/media/ubunto/SHARE1/batocera";DST="/media/ubunto/LEROMS1/yuanshuju-bak2";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done
```

## 模板2:kapokf SHARE 打包脚本
```bash
SRC="/media/kapokf/SHARE";DST="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;size=$(du -sb "$d" | awk '{print $1}');sudo tar -cf - -C "$SRC" "$n" | pv -s "$size" | sudo tee "$DST/$n.tar" > /dev/null;done
```

# 四、配套避坑说明(保存备用)
1. 运行前必须安装进度条工具,否则提示找不到pv
```bash
sudo apt update && sudo apt install -y pv
```
2. 无pv静默打包修改版(去掉进度条,不用装pv)
删除整条里 `| pv -s "$size"`,示例:
```bash
SRC="/media/kapokf/SHARE";DST="/media/kapokf/数据/yuanshuju_bak0A0/SHARE_birfs_tar01";sudo mkdir -p "$DST";for d in "$SRC"/*/;do n=$(basename "$d");[[ $n == "rom1s" || $n == "rom2s" || $n == "rom3s" ]] && continue;sudo tar -cf - -C "$SRC" "$n" | sudo tee "$DST/$n.tar" > /dev/null;done
```
3. 权限说明:全程加`sudo`是因为 `/media/` 挂载硬盘目录普通用户无完整读写权限,不加会打包失败、写入报错
4. 打包格式:纯tar无压缩,读写速度快;如需压缩可把`tar -cf`改为`tar -zcf`(gzip压缩,体积更小、速度变慢)



















































刀神道传奇-商品自动发货系统

联系我们 订单查询