我有文件夹A和文件夹B
文件夹A 包含大约100个文件,包括文本,js,php,bash等。它们存储在文件夹和子文件夹的根目录以及文件夹A中的其他子文件夹中。
文件夹B 是文件夹A的副本,但部分文件已更新。
有什么方法可以比较A到B并创建一个tar.gz文件,其中只包含文件夹B中已更改的文件
创建tar.gz时,我需要保持文件夹结构不变。
目前我使用WinMerge来检查差异,但我很高兴看到任何有助于此的Windows或Linux应用程序/命令。
由于
答案 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
表示“从我要告诉您的文件中获取文件名”最终-
表示“使用标准输入”
我建议你在各个步骤中自己构建它,这样你就可以看到它是如何构建的,以及每个步骤的输出是什么样的。