如果两个文件不同,则为Shellscript操作

Spe*_*cer 19 bash shell scp

我使用此命令将文件导入到我的服务器:

scp zumodo@shold:/test/test/test/server.py /test/test/test/test.py~/;
Run Code Online (Sandbox Code Playgroud)

如果新导入的文件test.py~与已存在的test.py不同,我想重新启动我的服务器.我怎么用shellcript做到这一点?

And*_*man 51

if ! cmp test.py test.py~ >/dev/null 2>&1
then
  # restart service
fi
Run Code Online (Sandbox Code Playgroud)

打破这种情况:

  • cmp test.py test.py~如果test.py和test.py~相同则返回true(0),否则返回false(1).你可以看到这个man cmp.
  • !反转结果,所以if语句转换为"如果test.py和test.py~不同".
  • 重定向>/dev/null 2>&1将所有输出发送cmp空设备,因此您只需获得真/假比较结果,而不会在控制台上产生任何不必要的噪音.

  • 您还可以使用 `cmp -s` 来抑制比较的终端输出。 (3认同)
  • @PolyBug:是的,但是,这是Unix / Linux中的约定。原因是只有一种成功类型,但是可能有很多类型的失败,它们可以返回不同的状态代码。例如,参见“ man ls”或“ man grep”的“退出状态”部分。 (2认同)
  • 即使一个或多个文件不存在,这也将是正确的。 (2认同)

JRF*_*son 7

你可以diff()这两个文件.返回码为零(0)表示没有差异.返回码为一(1)表示文件不同.

  • 为什么在为此构建 `cmp` 时使用 diff? (2认同)