比较文件夹,创建差异存档

Compare Folders, Create Archive of Differences

我有文件夹A和文件夹B

文件夹 A 包含大约 100 个文件,所有文本、js、php、bash 等。它们存储在文件夹的根目录和子目录中文件夹 A 中的文件夹和更多子文件夹。

文件夹 B 是文件夹 A 的副本,但部分文件已更新。

有什么方法可以将 A 与 B 进行比较并创建一个 tar.gz 文件,该文件仅包含 文件夹 B

中已更改的文件

创建 tar.gz 时,我需要保持文件夹结构不变。

目前我使用 WinMerge 来检查差异,但我很乐意查看任何有助于此的 windows 或 Linux application/commands。

谢谢

此行排除了仅在一个或另一个中的文件,但创建了您想要的 tar.gz 文件。

diff -rq folderA folderB | grep -v "^Only in" | sed "s/^.*and folderB/folderB/g" | sed "s/ differ//g" | tar czf output.tar.gz -T -

分解为:

dif -rq folderA folderB

在这些文件夹之间进行递归比较,保持安静 - 只输出文件名。

| grep -v "^Only in"

排除指示一个文件仅在其中一个文件夹中的输出行。根据你的描述,我假设这对你来说不是问题,但我正在玩的两个文件夹有点脏。

| sed "s/^.*and folderB/folderB/g"

丢弃输出的第一位,直到它显示“和”,然后是第二个文件夹的名称。这实际上也带走了第二个文件夹名称,但随后将其替换回

| sed "s/ differ//g"

丢弃 diff 输出的结束位。

| tar czf output.tar.gz -T -

告诉 tar 去做这件事。 c == 创建一个 tar 文件 z 意味着压缩它 (zip) f 意味着文件名即将到来。 output.tar.gz 是你的输出文件 -T 表示 "get the filenames from the file I'm about to tell you" 最后的 - 表示 "use stdin instead"

我建议您在各个步骤中自己构建它,这样您就可以了解它是如何构建的,以及每个步骤的输出是什么样的。