我有两个 tar 存档(压缩或未压缩),我想找到这两个存档中的所有差异。两个档案都包含一个完整的文件系统(即解压时,会生成诸如/bin、/home、/root、/usr、/var、/etc、...之类的目录,我希望您明白这一点)。我想要一份包含以下内容的清单:
我不能只解压这些档案并使用diff,因为 diff 无法正确识别绝对符号链接(因为它们会指出档案的文件系统结构)。
还有另一种方法可以比较两个 tar 存档的内容吗?
假设我有一个文件夹Documents和一个 TAR 文件Documents.tar,如何检查 tar 文件是否包含目录中存在的相同文件?
对我来说更明显的解决方案是:
$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs
Run Code Online (Sandbox Code Playgroud)
不幸的是,这对于大型 TAR 文件来说非常慢,还有其他选择吗?
使用tar -dvf Documents.tar(或 --diff、--compare)不起作用,因为它不会检测文件系统中存在但 TAR 文件中不存在的文件,它只检测 TAR 文件中存在但不存在于 TAR 文件中的文件。文件系统例如:
$ mkdir new
$ touch new/foo{1..4}
$ tar cvf new.tar new/
$ touch new/bar
$ tar --diff --verbose --file=new.tar #### doesn't detect new/bar #########
$ rm new/foo1
$ tar --diff --verbose --file=new.tar
Run Code Online (Sandbox Code Playgroud)
输出
new/
new/foo2
new/foo3
new/foo4
new/foo1
tar: new/foo1: Warning: Cannot stat: No …Run Code Online (Sandbox Code Playgroud) 我想知道当结果从 diff 中产生时是否有办法在列的顶部打印文件名。目前我明白了;
diff -a --suppress-common-lines -y output_main.txt output_compare.txt
XXX Version X.X(X) | YYY Version Y.Y(Y)
ip address 10.10.88.50 255.255.255.254 | ip address 10.10.89.50 255.255.255.254
Run Code Online (Sandbox Code Playgroud)
有用的是:
diff -a --suppress-common-lines -y output_main.txt output_compare.txt
output_main.txt output_compare.txt
======================== =======================
XXX Version X.X(X) | YYY Version Y.Y(Y)
ip address 10.10.88.50 255.255.255.254 | ip address 10.10.89.50 255.255.255.254
Run Code Online (Sandbox Code Playgroud) 我曾经diff制作过补丁文件。diff old.txt new.txt:
1c1
< Lorem ipsum dolor sit amet, consectetur adipiscing
---
> The quick brown fox jumps over the lazy dog.
Run Code Online (Sandbox Code Playgroud)
输出采用默认的“正常差异”格式。
我可以在这个补丁文件中写注释吗?如果是这样,补丁文件是否可以合理移植?
我有一个场景,我从可能不同时间点的驱动器中进行恢复,该时间点不仅在存在的文件方面可能有所不同,而且还存在一些损坏,其中许多文件明显损坏。
我们将左侧文件夹命名为“A”,右侧文件夹命名为“B”。
我有责任合并这两个图像,这样:
注意:此时日期几乎无关紧要,尽管在元数据中保留较旧的日期会很好。
这怎么能干干净净地完成呢?不幸的是,我必须对数十 TB 的数据执行此操作,因此如果我不知道如何自动化此操作,这将是一个非常漫长的过程。看来 90-95% 的内容是相同的,因此应该制定一种“设置好然后忘记它”的方法,为进行手动比较做好准备。
例子:
\n% diff "/Volumes/New Volume/4kyoutube/" "/Volumes/New Volume/tmpmusic"| grep Distortion\nOnly in /Volumes/New Volume/tmpmusic: ZAC & B\xc3\xa4kka - Distortion (Original Mix) [Sprout].mp3\nOnly in /Volumes/New Volume/4kyoutube/: ZAC & B\xc3\xa4kka - Distortion (Original Mix) [Sprout].mp3\n\n% diff "/Volumes/New Volume/tmpmusic/ZAC & B\xc3\xa4kka - Distortion (Original Mix) [Sprout].mp3" "/Volumes/New Volume/4kyoutube/ZAC & B\xc3\xa4kka - Distortion (Original Mix) [Sprout].mp3" \n% \nRun Code Online (Sandbox Code Playgroud)\n我能做什么呢?这些文件是相同的。
\n例如,考虑一个源代码文件,其中的函数被彻底打乱。是否有命令可以检查行的重新排序是否是唯一的更改?
(这意味着没有添加、删除或更改任何行)
我已经使用以下代码一段时间了,但现在出现错误
java Editor < "input/editor$i.in" > "tmp/editor$i.out"
diffCurr="$(diff "tmp/editor$i.out" "output/editor$i.out")"
if [ -n $diffCurr ]
Run Code Online (Sandbox Code Playgroud)
错误(发生在上述代码段的最后一行):
[: 争论太多
怎么了?我正在尝试测试差异结果是否为空(即文件中的相同内容)
我正在尝试将transparency补丁添加到dwm. 我下载了.diff文件并在我的 dwm 目录中运行了这个:
max@linux-vwzy:~/misc/dwm/dwm-5.9> patch < dwm-transparency.diff
patching file config.def.h
patching file dwm.c
Hunk #1 FAILED at 58.
Hunk #5 succeeded at 306 (offset 1 line).
Hunk #6 succeeded at 847 (offset 27 lines).
Hunk #7 succeeded at 882 (offset 27 lines).
Hunk #8 FAILED at 1125.
Hunk #9 succeeded at 1558 with fuzz 1 (offset 2 lines).
2 out of 9 hunks FAILED -- saving rejects to file dwm.c.rej
Run Code Online (Sandbox Code Playgroud)
我之前打过补丁dwm以添加其他几个补丁。它们有可能发生冲突吗?或者这是另一个错误?
是否有没有 KDE 依赖项的类似 Kompare的工具?可以基于 Qt 或 GTK。

diff ×10
patch ×2
shell ×2
tar ×2
bash ×1
command-line ×1
dwm ×1
linux ×1
macos ×1
shell-script ×1
software-rec ×1
test ×1
zsh ×1