标签: diff

如何比较两个 tar 存档(包括文件内容、新/删除的文件、符号链接)?

我有两个 tar 存档(压缩或未压缩),我想找到这两个存档中的所有差异。两个档案都包含一个完整的文件系统(即解压时,会生成诸如/bin/home/root/usr/var/etc、...之类的目录,我希望您明白这一点)。我想要一份包含以下内容的清单:

  • 新文件
  • 已删除的文件
  • 更改的文件(文件内容,而不仅仅是大小)
  • 更改了符号链接(相对和绝对)
  • 新的/删除的符号链接

我不能只解压这些档案并使用diff,因为 diff 无法正确识别绝对符号链接(因为它们会指出档案的文件系统结构)。

还有另一种方法可以比较两个 tar 存档的内容吗?

linux tar diff

5
推荐指数
1
解决办法
2万
查看次数

如何检查目录是否包含与 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)

command-line tar diff

5
推荐指数
1
解决办法
3789
查看次数

与打印出来的文件标题进行比较

我想知道当结果从 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)

shell diff

5
推荐指数
1
解决办法
1231
查看次数

我可以在“正常”差异/补丁文件中写入注释吗?

我曾经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)

输出采用默认的“正常差异”格式。

我可以在这个补丁文件中写注释吗?如果是这样,补丁文件是否可以合理移植?

diff patch

5
推荐指数
1
解决办法
3304
查看次数

如何合并两个文件夹以便从一个文件夹中删除相同的文件,同时保留校验和差异?

我有一个场景,我从可能不同时间点的驱动器中进行恢复,该时间点不仅在存在的文件方面可能有所不同,而且还存在一些损坏,其中许多文件明显损坏。

我们将左侧文件夹命名为“A”,右侧文件夹命名为“B”。

我有责任合并这两个图像,这样:

  1. B 中存在但 A 中不存在的任何文件都应移动到 A,并且
  2. 两个位置中都存在且相同的任何文件都应从 B 中删除,最后
  3. 任何校验和不同的文件都应保留在 B 中,以便可以在 A 和 B 之间手动比较这些不同的文件,但除了这些具有不同校验和(即实际内容)的文件外,B 中不应保留任何其他内容。

注意:此时日期几乎无关紧要,尽管在元数据中保留较旧的日期会很好。

这怎么能干干净净地完成呢?不幸的是,我必须对数十 TB 的数据执行此操作,因此如果我不知道如何自动化此操作,这将是一个非常漫长的过程。看来 90-95% 的内容是相同的,因此应该制定一种“设置好然后忘记它”的方法,为进行手动比较做好准备。

shell bash zsh diff shell-script

5
推荐指数
1
解决办法
3597
查看次数

diff 程序对文件名中包含非 ASCII 字符的文件给出误报

例子:

\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% \n
Run Code Online (Sandbox Code Playgroud)\n

我能做什么呢?这些文件是相同的。

\n

diff macos

5
推荐指数
1
解决办法
651
查看次数

如何确定文件是否只是另一个文件的排列?

例如,考虑一个源代码文件,其中的函数被彻底打乱。是否有命令可以检查行的重新排序是否是唯一的更改?

(这意味着没有添加、删除或更改任何行)

diff file-comparison

4
推荐指数
1
解决办法
757
查看次数

if [ -n $diffCurr ] 错误:参数太多

我已经使用以下代码一段时间了,但现在出现错误

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)

错误(发生在上述代码段的最后一行):

[: 争论太多

怎么了?我正在尝试测试差异结果是否为空(即文件中的相同内容)

diff test

4
推荐指数
2
解决办法
1958
查看次数

修补文件(在本例中为 dwm)和失败的大块头

我正在尝试将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以添加其他几个补丁。它们有可能发生冲突吗?或者这是另一个错误?

diff patch dwm

4
推荐指数
1
解决办法
8862
查看次数

4
推荐指数
1
解决办法
747
查看次数

标签 统计

diff ×10

patch ×2

shell ×2

tar ×2

bash ×1

command-line ×1

dwm ×1

file-comparison ×1

linux ×1

macos ×1

shell-script ×1

software-rec ×1

test ×1

zsh ×1