两个文件不同时的 Shellscript 操作

发布于 2024-12-15 20:45:54 字数 205 浏览 1 评论 0原文

我正在使用以下命令将文件导入到我的服务器:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

温柔女人霸气范 2024-12-22 20:45:54
if ! cmp -s test.py test.py~
then
  # restart service
fi

分解一下:

  • 如果 test.py 和 test.py~ 相同,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)

if ! cmp -s test.py test.py~
then
  # restart service
fi

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 in man cmp. The -s options makes cmp silent, so it doesn't give any output (except errors), but only an exit code.
  • ! inverts that result, so the if 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)

不必在意 2024-12-22 20:45:54

您可以 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.

只是我以为 2024-12-22 20:45:54

diff;&& echo“文件相同”

diff <path_to_file_1> <path_to_file_2> && echo "files are same"

浅语花开 2024-12-22 20:45:54

我会做类似的事情

zumodo@shold$ cat /test/test/test/server.py | ssh zumodo@otherhost 'cat - > /test/test/test/test.py.new ; cmp /test/test/test/test.py /test/test/test/test.py.new || (mv /test/test/test/test.py.new /test/test/test/test.py ; echo issue restart command here)'

I'd do something like

zumodo@shold$ cat /test/test/test/server.py | ssh zumodo@otherhost 'cat - > /test/test/test/test.py.new ; cmp /test/test/test/test.py /test/test/test/test.py.new || (mv /test/test/test/test.py.new /test/test/test/test.py ; echo issue restart command here)'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文