22

我想查看不在本地文件系统中而是在网络上的 2 个文件的差异。所以,我认为如果必须使用diffcurl以及某种管道。

就像是

curl http://to.my/file/one.js http://to.my/file.two.js | diff 

但它不起作用。

4

2 回答 2

48

UNIX 工具diff可以比较两个文件。如果您使用该<()表达式,您可以在间接指令中比较命令的输出:

diff <(curl file1) <(curl file2)

所以在你的情况下,你可以说:

diff <(curl -s http://to.my/file/one.js) <(curl -s http://to.my/file.two.js)
于 2013-05-03T20:29:20.083 回答
1

到达此页面的某些人可能正在寻找逐行差异而不是代码差异。如果是这样,并且使用 coreutils,您可以使用:

comm -23 <(curl http://to.my/file/one.js | sort) \
         <(curl http://to.my/file.two.js | sort)

获取第一个文件中不在第二个文件中的行。您可以使用comm -13在第二个文件中获取不在第一个文件中的行。

如果您不限于 coreutils,您还可以使用sd (stream diff),它不需要排序也不需要处理替换并支持无限流,如下所示:

curl http://to.my/file/one.js | sd 'curl http://to.my/file.two.js'

它支持无限流的事实允许一些有趣的用例:您可以在循环内使用 curl while(true)(假设页面只为您提供“新”结果),并且sd将在指定时间后超时流没有新的流线。

这是我写的一篇关于在终端上区分流的博文,其中介绍了sd.

于 2016-08-01T08:10:44.613 回答