我正在尝试比较 AIX 6 上包含二进制文件的两个目录。我diff
优先使用dircmp
,因为我正在尝试在该服务器和我的 Linux 服务器之间保持一致的输出格式(其中dircmp
不可用)。
根据diff
man
页面显示,
如果指定了 Directory1 和 Directory2 参数,diff 命令将比较两个目录中具有相同名称的文本文件。列出了不同的二进制文件、公共子目录以及仅出现在一个目录中的文件。
然而,二进制文件也被比较,它们的差异输出到标准输出,导致终端屏幕上充满了不可打印的字符,甚至修改了我的窗口的大小(我正在使用pUTTY
)。的版本diff
没有这个-q
选项。有什么方法可以抑制此输出并仅报告文件不同吗?我不想使用rsync -n
,因为它需要运行两次,并且 to 和 from 参数相反,才能找到两侧丢失的文件。
答案1
如果没有条件在不同系统上执行不同的操作,您可以编写多少可移植代码是有限的。dircmp
如果可以使用,请不要感到难过,或者GNU 差异如果可供使用的话。
if type dircmp >/dev/null 2>/dev/null; then
dircmp dir1 dir2
else
diff -r dir1 dir2
fi
如果您只想知道哪些文件已更改并且不关心列出内容,则可以过滤输出diff
以仅保留标题行。 (警告:如果文件名带有换行符,则输出可能无法解析。)
diff -r dir1 dir2 | grep -v '^[<>0-9]'
这样做是grep -v '[^<>]'
为了保留有关更改行范围的信息,但仍然过滤掉更改行的内容。
答案2
您可以通过管道传输输出,cat -v
以便非打印字符显示为^x
或M-x
,这样至少您的终端不会损坏。如果您知道每个文件差异打印什么类型的标题,您就可以grep
只打印它们,例如| grep -E 'Only in|differ'
. (我没有找到这些例子的工具)。