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

时间:2017-08-09 07:59:34

标签: compare diff tar

我有文件夹A和文件夹B

文件夹A 包含大约100个文件,包括文本,js,php,bash等。它们存储在文件夹和子文件夹的根目录以及文件夹A中的其他子文件夹中。

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

有什么方法可以比较A到B并创建一个tar.gz文件,其中只包含文件夹B中已更改的文件

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

目前我使用WinMerge来检查差异,但我很高兴看到任何有助于此的Windows或Linux应用程序/命令。

由于

1 个答案:

答案 0 :(得分:1)

此行排除仅在一个或另一个中的文件,但会创建所需的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表示“从我要告诉您的文件中获取文件名”最终-表示“使用标准输入”

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