我正在试验ediff-directories,但我不确定我是否正确使用它。
我在文档中读到,一旦我向 提供了两个目录ediff-directories,如果我按下==Emacs 就会递归地比较它们。
但是,如果我按,==我只会=在我运行命令的级别上得到带有符号的文件夹(意味着这两个文件夹具有相同的内容)。如果我想查看文件=夹层次结构中哪些文件夹在更深层次上有标志,我需要==在每个级别重新运行命令。
我如何告诉 emacs 一直递归到叶子,以便我可以看到directory difference buffer(可通过键盘命令访问D)中的所有差异?
如果有人知道有关如何使用的教程ediff-directories(官方文档除外),我会非常感兴趣。
此外,如果我想退出会话组(在一个级别上比较文件夹),但我为更深层次打开了会话,如果我按下q(退出此会话组),Emacs 会抱怨以下消息:
此会话组有活动会话---无法退出
如何退出会话组而不一一退出子会话?
我在一个目录中有许多文件,我想检查它们是否都是唯一的。为简单起见,假设我有三个文件:foo.txt,bar.txt和baz.txt. 如果我运行这个循环,我会互相检查它们:
$ for f in ./*; do for i in ./*; do diff -q "$f" "$i"; done; done
Files bar.txt and baz.txt differ
Files bar.txt and foo.txt differ
Files baz.txt and bar.txt differ
Files baz.txt and foo.txt differ
Files foo.txt and bar.txt differ
Files foo.txt and baz.txt differ
Run Code Online (Sandbox Code Playgroud)
对于我想要处理的数百个文件,这将变得非常不可读;这将是更好地列出这些文件做匹配,然后我可以快速查看列表并确保文件只匹配自己。从联机帮助页中,我会认为该-s选项可以完成此操作:
$ for f in ./*; do for i in ./*; do diff -s "$f" "$i"; done; done
Files bar.txt and …Run Code Online (Sandbox Code Playgroud) 这是我的补丁命令的输出:
Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.
Run Code Online (Sandbox Code Playgroud)
命令是
patch -d ~/SOME_DIR -p1 --merge --verbose -u
Run Code Online (Sandbox Code Playgroud)
该补丁是使用 git 生成的:
git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c
Run Code Online (Sandbox Code Playgroud)
是什么patch unexpectedly ends in middle of line意思,有什么问题吗?它指的是大块 16 还是 17?我可以在补丁文件中寻找什么来找出导致这种情况的原因?
如何使用 linux 命令行工具以编程方式创建修改文件列表?我对任何特定文件(增量、补丁)中的差异不感兴趣。我只想获得与以前的产品版本相比的新文件或修改文件的列表。以便我可以发布新产品更新。
更新:diff -qr不会产生非常方便的输出。的输出diff -qr也需要处理。有没有更好的办法?
有没有一种方法可以执行两个目录的递归差异,但只比较(在它们各自的位置)与特定文件名或文件类型谓词匹配的文件?
例如,我想这样做的东西像
diff -r dir-a dir-b -filenames *.java, ivy.xml, build.xml
Run Code Online (Sandbox Code Playgroud)
......甚至更好:
diff -r dir-a dir-b -filetype text
Run Code Online (Sandbox Code Playgroud)
显然,它不是强制性的,diff因为我认为它是一个咒语,find也-exec diff可能会起作用(我只是不知道如何在后一种情况下生成补充文件路径)。
我有两个文件,它们基本上包含十六进制格式的内存转储。目前我使用 diff 来查看文件是否不同以及差异在哪里。然而,当试图确定差异的确切位置(即内存地址)时,这可能会产生误导。考虑以下并排显示两个文件的示例。
file1: file2:
0001 | 0001
ABCD | FFFF
1234 | ABCD
FFFF | 1234
Run Code Online (Sandbox Code Playgroud)
现在diff -u将显示一个插入和一个删除,尽管两个文件之间的 3 行(内存位置)发生了变化:
0001
+FFFF
ABCD
1234
-FFFF
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来比较这两个文件,以便每行仅与另一个文件中的同一行(就行编号而言)进行比较?因此,在此示例中,它应该报告最后 3 行已更改,以及从file1和更改的行file2。输出不必是 diff 样式,但如果它可以着色会很酷(目前我diff -u使用颜色为输出着色,sed以便可以轻松适应)。
如何区分多个命令的输出?vimdiff最多可以支持四个文件,但diff它本身似乎正好支持两个文件。
是否可以直接diff使用 .
语境:
我必须在多台服务器上检查某个命令的输出,看看它们是否都同意。目前,仅报告是否发现任何差异似乎很好,但如果可能的话,我想能够说:X% 服务器彼此同意,Y% 彼此同意;或者那个服务器 Z 是奇怪的。
我有一个四路多主 LDAP 设置,我想验证ContextCSN所有四个的值是否一致。
所以现在我这样做:
#! /bin/bash
for i in {1..4}.ldap
do
ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn;
done
set -e
for i in {2..4}
do
diff -q 1.csn $i.csn
done
Run Code Online (Sandbox Code Playgroud)
并检查脚本的错误代码。有没有更好的工具?
欢迎任何可以在 Ubuntu 14.04 上使用的工具。
我使用diff上下文行数为 1(-c选项)的命令生成了一个补丁。我的补丁文件内容:
*** /home/sk/abc/def/src/klm/a.py 2015-05-18 16:25:50.348398554 +0530
--- /opt/abc/def/ghi/klm/a.py 2015-05-18 14:27:13.860503469 +0530
***************
*** 72,73 ****
--- 72,74 ----
output, error, rCommand = "", "", ""
+ import subprocess
rCommand = self.copyCmd % (self.executor_hostname, self.testId, self.testId)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用这些命令应用补丁时,
cd /
patch -p0 < sg.patch
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出,
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|*** /home/sk/abc/def/src/klm/a.py 2015-05-18 16:25:50.348398554 +0530
|--- …Run Code Online (Sandbox Code Playgroud) 我只是将 2,000,000 个文件 (3TB) 从一个 RAID 同步到另一个。
我想确保我的数据完好无损。
rsync -c 需要很长时间。
diff 没有告诉我它在做什么。
是否有替代方案(a)更快,并且(b)会在比较时向我展示进度?
(我在 Mac 上,并brew search diff给了我apgdiff colordiff diffstat diffutils fmdiff libxdiff open-vcdiff podiff rfcdiff vbindiff
bsdiff diffpdf diffuse dwdiff kdiff3 ndiff perceptualdiff rdiff-backup tkdiff wdiff
......其中一个能完成这项工作吗?)
假设abc我的本地计算机上有一个 4 GB 的文件。我已通过 SFTP 将其上传到远程服务器,花了几个小时。
现在我在本地稍微修改了该文件(最大可能为 50 MB,但不是此文件中的连续字节),并将其保存到abc2. 我还将原始文件保存在abc本地计算机上。
如何计算的二进制差异abc和abc2?
应用:
我只能向patch远程服务器发送一个文件(可能最大 100MB),而不是重新上传整个abc2文件(又需要几个小时!),并且仅abc2在远程服务器上重新创建。abcpatch
在本地,与其浪费 8 GB 来备份abcand abc2,我只能保存abc+ patch,因此只需要 < 4100 MB。
这该怎么做?
PS:对于文本,我知道diff,但在这里我正在寻找适用于任何原始二进制格式的东西,它可以是 zip 文件或可执行文件,甚至其他类型的文件。
PS2:如果可能,我不想使用rsync;我知道它可以以有效的方式复制两台计算机之间的更改(不重新发送未更改的数据),但在这里我真的想要一个patch文件,如果我同时拥有abc和patch.