# 求方便的方法，为被覆盖的文件保留备份和树状结构

**URL:** https://meta.appinn.net/t/topic/65145
**Category:** 问题求助
**Created:** [2025 年1 月 10 日 09:51 UTC](https://meta.appinn.net/t/topic/65145 "2025-01-10T09:51:32Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### 作者： ![Axe](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/a/ce73a5/32.png) [@Axe](https://meta.appinn.net/u/Axe)
#### 发布日期： [2025 年1 月 10 日 09:51 UTC](https://meta.appinn.net/t/topic/65145/1 "2025-01-10T09:51:32Z")

</div>

windows，  
目标是用升级档覆盖游戏文件，但是怕覆盖坏了所以还要保留恢复原版的能力

升级包是一个树状目录结构，如果一个个去对比找出需要备份源文件非常麻烦，不知道有没有方便的方法

另外的问题是整个文件夹有100多G，空间不足只能备份必须备份的那几个文件。。。

---

<div class="post-metadata">

### 作者： ![TecNico](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/tecnico/32/78882_2.png) [@TecNico](https://meta.appinn.net/u/TecNico)
#### 发布日期： [2025 年1 月 10 日 09:57 UTC](https://meta.appinn.net/t/topic/65145/2 "2025-01-10T09:57:18Z")

</div>

这时候就可以用`git`了。

```auto
git init
git add .
git commit -m "0"

```

这就备份上了。

恢复的话，直接`reset`过去就行。

---

<div class="post-metadata">

### 作者： ![3\_5105](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/3_5105/32/57748_2.png) [@3\_5105](https://meta.appinn.net/u/3_5105)
#### 发布日期： [2025 年1 月 10 日 10:18 UTC](https://meta.appinn.net/t/topic/65145/3 "2025-01-10T10:18:39Z")

</div>

emmm…Windows的“文件历史版本”功能？

---

<div class="post-metadata">

### 作者： ![Kyun](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/k/e8c25b/32.png) [@Kyun](https://meta.appinn.net/u/Kyun)
#### 发布日期： [2025 年1 月 10 日 12:53 UTC](https://meta.appinn.net/t/topic/65145/4 "2025-01-10T12:53:42Z")

</div>

寫個腳本？

---

<div class="post-metadata">

### 作者： ![medfav](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/medfav/32/49541_2.png) [@medfav](https://meta.appinn.net/u/medfav)
#### 发布日期： [2025 年1 月 10 日 12:56 UTC](https://meta.appinn.net/t/topic/65145/5 "2025-01-10T12:56:03Z")

</div>

楼上git 是命令行，小白如果如果不会用的话tortoisehg也是很不错的，默认自带个图形界面，和git一样都是开发界的成熟版本控制工具。支持注释、分支、可以随意回溯版本。  
另外小众论坛是有大佬开发的游戏存档备份工具的，不记得名字了

---

<div class="post-metadata">

### 作者： ![Axe](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/a/ce73a5/32.png) [@Axe](https://meta.appinn.net/u/Axe)
#### 发布日期： [2025 年1 月 11 日 12:41 UTC](https://meta.appinn.net/t/topic/65145/6 "2025-01-11T12:41:24Z")

</div>

谢谢，这个对于小文件是可以的，目前整个文件夹有100多G，空间不足只能备份必须备份的那几个文件。。。

---

<div class="post-metadata">

### 作者： ![TecNico](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/tecnico/32/78882_2.png) [@TecNico](https://meta.appinn.net/u/TecNico)
#### 发布日期： [2025 年1 月 11 日 13:41 UTC](https://meta.appinn.net/t/topic/65145/7 "2025-01-11T13:41:02Z")

</div>

写个脚本倒是不难实现这个功能了。想不到更简单的方案了。

---

<div class="post-metadata">

### 作者： ![AdminAppinn](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/a/b77776/32.png) [@AdminAppinn](https://meta.appinn.net/u/AdminAppinn)
#### 发布日期： [2025 年1 月 11 日 13:57 UTC](https://meta.appinn.net/t/topic/65145/8 "2025-01-11T13:57:50Z")

</div>

创建母vhd, 升级在子vhd里完成, 不可能出错的办法

覆盖时选择保留原文件, 被替换的文件会有\*(2).\*形式, 用everything找出删到回收站, 原文件夹改名, 从回收站恢复, 改名, 可得被覆盖的旧文件和新文件名, 纯新增的文件也能根据创建时间区分出来, 剩下的交给批处理就行了, 只怕有些旧文件没被覆盖但运行中被更改还是会导致无法复原

用FreeCommander之类的软件比较升级包和原目录, 找不同很easy, 就是算hash可能会慢

方法多的是

---

<div class="post-metadata">

### 作者： ![Kyun](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/k/e8c25b/32.png) [@Kyun](https://meta.appinn.net/u/Kyun)
#### 发布日期： [2025 年1 月 11 日 16:14 UTC](https://meta.appinn.net/t/topic/65145/9 "2025-01-11T16:14:29Z")

</div>

我用手頭的Double Commander複製有重複時可以選擇自動重命名目標文件，默認是「复制 (1) 文件名」，其他命令的文件管理器應該也有類似功能。

比如複製內容為a的「1.txt」到一個目錄，目錄裡已有一個內容為b的「1.txt」，這時彈出的提示框的「其他」裡有「自動重命名目標文件」，選擇後，目錄路徑會存在一個內容為a的「1.txt」，一個內容為b的「复制 (1) 1.txt」。

---

<div class="post-metadata">

### 作者： ![Axe](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/a/ce73a5/32.png) [@Axe](https://meta.appinn.net/u/Axe)
#### 发布日期： [2025 年1 月 11 日 21:15 UTC](https://meta.appinn.net/t/topic/65145/10 "2025-01-11T21:15:58Z")

</div>

谢谢，这个功能不错，有一定使用场景

刚才发现用[link shell extension](https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html)的hard 的“硬连接副本”功能可能更适合手头的任务

用link shell extension可以把整个目录作为硬链接复制几份，副本几乎不占硬盘空间，只要保留一个没被覆盖的副本就实现保留原版了。

需要注意的是修改硬链接文件的副本之一的内容会同时修改此文件所有的副本，但是覆盖就没有这个问题

---

<div class="post-metadata">

### 作者： ![cuisanzhang](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/cuisanzhang/32/58392_2.png) [@cuisanzhang](https://meta.appinn.net/u/cuisanzhang)
#### 发布日期： [2025 年1 月 13 日 01:28 UTC](https://meta.appinn.net/t/topic/65145/11 "2025-01-13T01:28:55Z")

</div>

git不是会生成非常大的缓存吗，好像和本体差不多

---

<div class="post-metadata">

### 作者： ![TecNico](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/tecnico/32/78882_2.png) [@TecNico](https://meta.appinn.net/u/TecNico)
#### 发布日期： [2025 年1 月 13 日 04:32 UTC](https://meta.appinn.net/t/topic/65145/12 "2025-01-13T04:32:09Z")

</div>

git仓库，至少会有init commit的内容大小。

---

<div class="post-metadata">

### 作者： ![Kyun](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/k/e8c25b/32.png) [@Kyun](https://meta.appinn.net/u/Kyun)
#### 发布日期： [2025 年1 月 13 日 05:23 UTC](https://meta.appinn.net/t/topic/65145/13 "2025-01-13T05:23:12Z")

</div>

git衹適合純文本文件。

---

<div class="post-metadata">

### 作者： ![cuisanzhang](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/cuisanzhang/32/58392_2.png) [@cuisanzhang](https://meta.appinn.net/u/cuisanzhang)
#### 发布日期： [2025 年1 月 14 日 02:48 UTC](https://meta.appinn.net/t/topic/65145/14 "2025-01-14T02:48:33Z")

</div>

写个工具啊，首先分析要升级新文件的目录，找到对应的要覆盖的旧文件目录，复制出来到指定文件夹，完成
