我有两个大pkl
文件。我对了解两个文件内容的比较不感兴趣(就像我们对带有diff
,meld
或的文本文件所做的那样vimdiff
)。我怀疑它们是一样的。它们的大小是相等的。但是,如果我想确定它们是否相同,是否有任何比较实用程序可以输出它们是否相同?
基本上我想做一个差异并在文件夹中递归地列出二进制更改的文件。我想避免弄乱文件系统,所以我认为这涉及到一些管道。
我搜索了一些示例,但每个人都在寻找 zip-to-zip 差异。
真正的用例是更新 Web 应用程序:我想使用当前版本的文件列出要备份的自定义文件,然后用原始供应商setup-v1.23.zip
的较新文件的内容覆盖文件夹。setup-v1.75.zip
我将使用 PHPshell_exec()
来执行脚本文件并读取结果列表以进行进一步处理。
我有两个文本文件:
第一个文本文件:
Hello
Hi
Hola
Bonjour
第二个文本文件:
Hi
Bonjour
无论行号如何,我如何输出它们之间的差异,即我想保存输出
Hello
Hola
进入一个新的文本文件
有没有办法让diff
命令只查找指定范围内的行(从一行到另一行)而不是整个文件的差异?我很难在两个不在同一行的文件中找到两个 JavaScript 函数之间的区别。我可以将行的范围复制到一个新文件中,对另一个文件执行相同的操作,然后比较它们,但是这样做会很乏味,尤其是因为文件包含很多文本。
我尝试使用:
diff "code1.js" "code2.js" --suppress-common-lines | tee outputFile
但它显然不只显示我有兴趣比较的线条范围。如果我可以在一个文件中指定要查找的行范围并在另一个文件中指定不同的行范围,这也会很有用。
meld
由于cairo
或其他的本地安装混乱,我无法使用。我已经在其中投入了一些时间,包括将故障报告为错误,但维护者表示这不是一个看起来正确的错误。因此,我想尝试另一种更有前途的方法并使用flatpak
安装。我可以meld
像往常一样使用flatpak run org.gnome.meld
,问题似乎是参数传递。
未提交更改失败的简单git config --global diff.tool "flatpak run org.gnome.meld"
原因是git difftool
git config option diff.tool set to unknown tool: flatpak run org.gnome.meld
Resetting to default...
This message is displayed because 'diff.tool' is not configured.
See 'git difftool --tool-help' or 'git help config' for more details.
'git difftool' will now attempt to use one of the following tools:
meld opendiff kdiff3 tkdiff xxdiff kompare gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare emerge vimdiff
Viewing (1/1): 'a'
Launch 'meld' [Y/n]?
为了避免麻烦我创建了一个脚本
#!/bin/sh
flatpak run org.gnome.meld "$@"
in~/bin/
并使用chmod +x ~/bin/meld
. ~/bin/
是我的第一个PATH
并根据which meld
。
在以下场景之后
> cd $(mktemp -d)
> git init .
Leeres Git-Repository in /tmp/tmp.2RFxjgBbQ5/.git/ initialisiert
> echo 1 > a
> git add a
> git commit -m "Initial commit"
[master (Basis-Commit) 997fe0d] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 a
> echo 2 > a
> git difftool
Viewing (1/1): 'a'
Launch 'meld' [Y/n]?
meld
启动以查看/tmp/cKSwbn_a
和/home/[user]/a
(用户混淆)两者都不存在。
我手头还有其他涉及 Docker 的不太舒服的解决方法,所以我最感兴趣的是了解这种方法如何工作。
我正在寻找一个可以比较两个 C++ 源代码并找到代码意义差异的应用程序(以比较可能已重新格式化不同的版本)。至少,能够忽略不影响源功能的空格、制表符和换行符的变化的东西(请注意,换行符是否被认为是空格取决于语言,而 C 和 C++ 这样做)。而且,理想情况下,可以准确识别所有对代码有意义的差异。我在 Ubuntu 下。
根据diff --help | grep ignore
,我希望diff -bBwZ
能合理地完成这项工作(我希望得到一些假阴性,稍后再处理)。然而,事实并非如此。
如果我有以下带有片段的文件
test_diff1.txt
else if (prop == "P1") { return 0; }
和 test_diff2.txt
else if (prop == "P1") {
return 0;
}
然后
$ diff -bBwZ test_diff1.txt test_diff2.txt
1c1,3
< else if (prop == "P1") { return 0; }
---
> else if (prop == "P1") {
> return 0;
> }
而不是空的结果。
在两个输入上使用代码格式化程序作为“过滤器”可能会过滤掉这些差异,但随后必须将结果输出绑定回原始输入,以便最终报告差异以保留实际的文本和行号。因此,无需适当的编译器即可实现目标......不过,我不知道是否有可用的东西。
可以达到目标diff
吗?
否则,是否有替代方案(最好是命令行)?
我有一个看似简单的问题,我找不到答案。
说,我有两个文件:
A
B
C
D
和
A
X
Y
D
当我diff -U 1000
在这些上运行时,我得到:
A
-B
-C
+X
+Y
D
相反,我想得到:
A
-B
+X
-C
+Y
D
了解我想要完成的工作的大图:我有一个smartctl
在我的硬盘驱动器上运行的预定脚本,保留历史数据并比较它们。因此,更改的行实际上是对早期文件的相应行的单独替换:
- 3 Spin_Up_Time 0x0027 173 168 021 Pre-fail Always - 2350
- 4 Start_Stop_Count 0x0032 096 096 000 Old_age Always - 4445
+ 3 Spin_Up_Time 0x0027 172 168 021 Pre-fail Always - 2358
+ 4 Start_Stop_Count 0x0032 096 096 000 Old_age Always - 4461
我想用来diff
将文本文件与程序的输出进行比较。
我意识到我可以将程序的输出重定向到一个文件,然后比较 2 个文件,但想知道是否可以这样做:
diff file1.txt ./myprog 1 2 3