我有两个文件,其中包含两个硬盘驱动器(应该完全相同)的所有文件路径列表,我认为其中一个缺少文件。两个列表都有文件路径和大小,但列表的顺序不同(见下面的示例)。
是否有一个命令可以比较两个文件的差异并将差异输出到新文件?
例子:
文件1:
/docs/red
/docs/blue
/docs/yellow
/docs/green
文件2:
/docs/blue
/docs/green
/docs/red
差异文件:
/docs/yellow
答案1
使用grep
且不需要对它们进行排序:
grep -Fxvf file2 file1 > diff_file
将返回以下行文件1但不是在文件2(遗漏了文件2)。
答案2
我通常使用 meld(一种非常有用的可视化差异工具)进行此类比较。
安装 meld:
sudo apt-get install meld
排序,然后比较:
sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt
答案3
我会尝试使用 sort 和 diff:
$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
<
8d6
< /docs/yellow
答案4
如果你真正的问题是如何比较两个已挂载的文件系统我会使用rsync
。
看:在 Unix 和 Linux 上,Rsync 可以比较目录吗?
您可以使用-n
( --dry-run
) 来导致实际上不复制任何文件,然后输出差异。默认情况下,这还会显示一个文件是否比另一个文件新,即内容是否已更改。我相当有信心可以将其配置为忽略文件内容。