重复记录的命令真的+后面的【假的】【.tar】打包【元数据】批量备份打包遍历一级文件夹、每个单独打包、自动同名、跳过 rom1s/rom2s、完整保留权限 / 元数据 / 软链接

【.tar】打包【元数据】批量备份打包遍历一级文件夹、每个单独打包、自动同名、跳过 rom1s/rom2s、完整保留权限 / 元数据 / 软链接



  • 打包源目录 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】=============
==================
打包:
==【
SRC="/media/ubunto/SHARE4/";DST="/media/ubunto/LEROM1S3/yuanshuju-btrfs-bakok";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】=========================

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

解压还原
=====SRC="/media/ubunto/LEROMS1/yuanshuju-bak2";DST="/media/ubunto/SHARE1/batocera";sudo mkdir -p "$DST";for t in "$SRC"/*.tar;do sudo tar -xf "$t" -C "$DST" --overwrite;done 】================


















============分割线 下面的都是假的,命令报错 可忽略不看====================================================
============分割线 下面的都是假的,命令报错 可忽略不看====================================================

============分割线 下面的都是假的,命令报错 可忽略不看====================================================




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

所有原来功能全部保留:遍历一级文件夹、每个单独打包、自动同名、跳过rom1s/rom2s、完整保留权限 / 元数据 / 软链接新增:所有压缩包自动输出到你指定的备份文件夹,不会杂乱生成在原目录。
==#!/bin/bash # 1. 要打包的源根目录(改成你自己的Batocera路径) BASE_DIR="/mnt/batocera" # 2. 压缩包统一输出到的备份目录(自己随便改) OUT_DIR="/mnt/backup/batocera_config" # 自动创建备份目录,不存在就新建 mkdir -p "$OUT_DIR" # 进入源目录 cd "$BASE_DIR" || exit # 遍历所有一级子文件夹 for dir in */; do # 去掉斜杠,获取纯文件夹名 DIR_NAME="${dir%/}" # 跳过这两个大文件夹,不打包 if [[ "$DIR_NAME" == "rom1s" || "$DIR_NAME" == "rom2s" ]]; then echo "================================" echo "已跳过排除文件夹:$DIR_NAME" continue fi # 定义输出压缩包完整路径 OUT_FILE="$OUT_DIR/${DIR_NAME}.tar.gz" # 打包:保留所有权限、元数据、软链接、时间戳 tar -zcvf "$OUT_FILE" "$DIR_NAME" echo "================================" echo "打包完成:$OUT_FILE" done echo "================================" echo "全部文件夹打包完毕!所有包存放于:$OUT_DIR" ===================
#!/bin/bash # 1. 要打包的源根目录(改成你自己的Batocera路径) BASE_DIR="/mnt/batocera" # 2. 压缩包统一输出到的备份目录(自己随便改) OUT_DIR="/mnt/backup/batocera_config" # 自动创建备份目录,不存在就新建 mkdir -p "$OUT_DIR" # 进入源目录 cd "$BASE_DIR" || exit # 遍历所有一级子文件夹 for dir in */; do # 去掉斜杠,获取纯文件夹名 DIR_NAME="${dir%/}" # 跳过这两个大文件夹,不打包 if [[ "$DIR_NAME" == "rom1s" || "$DIR_NAME" == "rom2s" ]]; then echo "================================" echo "已跳过排除文件夹:$DIR_NAME" continue fi # 定义输出压缩包完整路径 OUT_FILE="$OUT_DIR/${DIR_NAME}.tar.gz" # 打包:保留所有权限、元数据、软链接、时间戳 tar -zcvf "$OUT_FILE" "$DIR_NAME" echo "================================" echo "打包完成:$OUT_FILE" done echo "================================" echo "全部文件夹打包完毕!所有包存放于:$OUT_DIR" 

只需要改 2 个地方

  1. BASE_DIR= 你要打包的 Batocera 总目录
  2. OUT_DIR= 你想存放所有压缩包的备份文件夹

用法不变

  1. 保存为batocera_backup.sh
  2. 授权运行
==chmod +x batocera_backup.sh ./batocera_backup.sh ===================
chmod +x batocera_backup.sh
./batocera_backup.sh

新增功能说明

  1. 所有打包好的xxx.tar.gz自动全部丢到你指定的 OUT_DIR
  2. 原/mnt/batocera目录不会生成任何压缩包,干干净净
  3. 自动检测备份文件夹,没有就自己新建,不用手动建
  4. 依旧完美跳过rom1srom2s,不打包大容量游戏目录
  5. 全程保留 Btrfs 元数据、Linux 权限、软链接、时间戳,数据不丢

恢复还是这条不变

进到对应目录,直接解压覆盖就行:
==tar -zxvf 文件夹名.tar.gz ===================
tar -zxvf 文件夹名.tar.gz
只还原配置元数据,完全不碰你的游戏 ROM 文件。

admin://【/media/ubunto/LEROM1S】













刀神道一奶-商品自动发货系统

联系我们 订单查询