两个文件不同时的 Shellscript 操作
我正在使用以下命令将文件导入到我的服务器:
scp zumodo@shold:/test/test/test/server.py /test/test/test/test.py~/;
如果新导入的文件 test.py~ 与已存在的 test.py 不同,我想重新启动我的服务器。我如何使用 shellscript 来做到这一点?
I am importing a file to my server using this command:
scp zumodo@shold:/test/test/test/server.py /test/test/test/test.py~/;
I want to restart my server if the newly imported file test.py~ differs from the test.py that already exists. How would I do this using a shellscript?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
分解一下:
cmp -s test.py test.py~
返回 true (0),否则返回 false (1)。您可以在man cmp
中看到这一点。-s
选项使cmp
静默,因此它不会提供任何输出(错误除外),而仅提供退出代码。!
反转该结果,因此if
语句转换为“if test.py 和 test.py~ 不同”。ps:如果您不确定第二个文件是否存在,您可能也需要检查一下。 (
cmp
在这种情况下仍然有效,但会给出错误消息,抑制错误消息可能也足够了 (cmp ... 2>/dev/null
)Breaking that down:
cmp -s test.py test.py~
returns true (0) if test.py and test.py~ are identical, else false (1). You can see this inman cmp
. The-s
options makescmp
silent, so it doesn't give any output (except errors), but only an exit code.!
inverts that result, so theif
statement translates to "if test.py and test.py~ are different".ps: If you are not sure the 2nd file exists, you may want check that too. (
cmp
still works in this case, but gives an error message, suppressing error message may be enough too (cmp ... 2>/dev/null
)您可以 diff() 这两个文件。返回代码零 (0) 表示没有差异。返回代码一 (1) 表示文件不同。
You could diff() the two files. A return code of zero (0) means there are no differences. A return code of one (1) says the files differ.
diff;&& echo“文件相同”
diff <path_to_file_1> <path_to_file_2> && echo "files are same"
我会做类似的事情
I'd do something like