我使用“diff”命令比较在完全相同的起始文件上使用 zip 生成的两个压缩文件,它们被报告为不同。但是,当我解压缩它们并使用“diff”命令时,没有显示任何差异。我在 zip 和 gzip 中都注意到了这一点。
我一直在玩弄 makefile 和 bash 脚本,我对此很感兴趣:
是否可以从 diff(或类似的东西)中获取一个布尔值,以便我可以在 bash 脚本中使用它来评估 if 语句(这样用户就不会看到实际的 diff 执行)?
我正在寻找一个可以区分两个文件的应用程序,实际上忽略所有空格,例如:
class foo {
bar
spaz
}
Run Code Online (Sandbox Code Playgroud)
等价于
class foo{bar spaz}
Run Code Online (Sandbox Code Playgroud)
或者,也
classfoo {
barspaz}
Run Code Online (Sandbox Code Playgroud)
但不是
classfoo {
spazspaz
}
Run Code Online (Sandbox Code Playgroud)
即它会告诉我,spaz在前面的例子中已经取代了bar任何其他例子中的位置。它只需要比较 2 个文件。
diff -w命令,如果每行的差异是空格,它只会忽略空格。我没有看到完全忽略空格的选项。我有两个从解码的二进制数据生成的日志文件。解码器略有不同,我试图隔离输出中的差异。为此,我比较了两个日志文件,除了每行的时间戳不同之外,它运行得很好。由于某些原因,时间戳的差异不相关,所以我希望 diff 忽略它们。
因为日志文件遵循特定的格式,所以我可以简单地从每行中排除最后约 40 个字符以忽略时间戳。前任:
A线:
[T9] | ENTRY NAME varA = 0000012B varB = 00000000 | 000015.508.107.113s | file.cpp :738
Run Code Online (Sandbox Code Playgroud)
B线:
[T9] | ENTRY NAME varA = 0000012B varB = 00000000 | 000015.508.107.163s | file.cpp :738
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这些行应该被视为相同。
如何告诉 diff 只包含每行的前 n 个字符,或排除每行的最后 m 个字符?
我想同步两个目录。第一个目录有CRLF正常行尾,第二个目录也有CRLF正常行尾的文件。
问题是,当我执行此代码时:
rsync -azr --exclude=images --dry-run --delete --checksum --out-format="/%f" /dir1 /dir2
Run Code Online (Sandbox Code Playgroud)
它表明将同步许多相同但具有不同编码的文件,而我只想同步不同的内容文件。
使用diff,可以这样做:
diff --strip-trailing-cr file1 file2
Run Code Online (Sandbox Code Playgroud)
但是我找不到 Rsync 这样的东西。如何仅同步具有不同内容的文件?
我在 Windows 10 上使用 BeyondCompare 4 来比较两个包含数千个文件的目录。
它们基本相同,但一个是从 Windows 导出的,另一个是从 Linux 导出的。唯一的区别是
Windows (DOS) 在行尾使用 CR/LF,而 Unix 仅使用 LF。(LF 是 / 表示换行)
在 Beyond Compare 中,我们看到打开文件时的不同之处在于,一个说“PC”,另一个说“UNIX”(见下图):
打开文件并关闭它后,Beyond Compare 现在将文件视为相等,并且如果我刷新,它们不会显示为不同。
由于我有数千个文件,并且不想手动打开所有文件,因此如何忽略那些差异仅与我在上图中提到的文件不同的文件?
尝试按“次要”,但效果不佳。
使用以下脚本
find . -type f -print0 | xargs -0 unix2dos
Run Code Online (Sandbox Code Playgroud)
通过从 UNIX 转换为 DOS 解决了这个问题,但我想知道如何在 Beyond Compare 中默认执行此操作,以及是否可能。
我正在通过我的网络将大量文件(> 100GB,数千个文件)传输到新的 Mac。传输完成后,我希望能够验证所有文件是否已成功传输并且在此过程中没有发生损坏。
这些文件来自 FreeNAS(基于 FreeBSD 的开源 NAS)服务器共享。它们正在加载到 Mac 文件系统上。
到目前为止,我能想到的最佳解决方案是运行ls -aR共享文件,然后运行本地磁盘,然后比较这两个文件。有更好的解决方案吗?可选,但更好的是,有没有办法做到这一点,它可以散列文件以确保所有数据都已成功传输?
就我的计算机技能而言,我很习惯使用终端应用程序,因此没有必要只推荐 GUI 工具。
我想比较两个文件并忽略一个文件中存在但另一个文件中缺失的行。
例如
文件1:
foo
bar
baz
bat
Run Code Online (Sandbox Code Playgroud)
文件2:
foo
ball
bat
Run Code Online (Sandbox Code Playgroud)
我当前正在运行以下 diff 命令
diff File1 File2 --changed-group-format='%>' --unchanged-group-format=''
Run Code Online (Sandbox Code Playgroud)
在这种情况下会产生
bar
baz
Run Code Online (Sandbox Code Playgroud)
作为输出,即仅缺少或冲突的行。我只想打印冲突的行,即忽略 File2 中缺少一行而 File1 中存在一行的情况(而不是相反)。有什么方法可以使用 diff 来做这样的事情还是我必须求助于其他工具?如果是这样,你会推荐什么?
我正在尝试使用 Beyond Compare 3 作为我的 git 差异工具。我使用以下命令配置了 git:(来源:使用 Beyond Compare 与版本控制系统)
git config --global diff.tool bc3
git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"
Run Code Online (Sandbox Code Playgroud)
我的配置现在似乎设置正确:
git config --global --list
Run Code Online (Sandbox Code Playgroud)
返回
help.autocorrect=1
core.editor='c:/program files/sublime text 2/sublime_text.exe' -w
core.autocrlf=true
color.ui=auto
diff.tool=bc3
difftool.bc3.path=c:/program files/beyond compare 3/bcomp.exe
Run Code Online (Sandbox Code Playgroud)
然而,当我跑
git difftool Readme.txt
Run Code Online (Sandbox Code Playgroud)
Powershell 想了想,然后显示一个新的提示。Beyond Compare 永远不会启动。我已经通过从 Powershell 和命令提示符启动 Beyond Compare 来验证路径是否正确。
我需要更改什么才能使其正常工作?
我知道diff并使用循环,但我似乎无法真正获得我需要的差异。我基本上是想比较两个文件(file2.txt 和 file2.txt),然后得到它们之间缺少的输出。
目标 1:从 file1.txt 中查找 file2.txt 中缺少的内容
目标 2:查找任一文件中缺少的内容。file2.txt 中可能存在一些不在 file1.txt 中的行。我也想了解他们。
diff只告诉我这两个文件不一样,逐行比较差异。我需要的是一个通过文件的程序,而不是按行区分。如果在 file1.txt 的第 2 行找到包含 '/bin/mount' 的行并且在 file2.txt 的第 59 行找到,那么我不需要知道它。我只想知道整体上没有什么。这能做到吗?