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

时间:2011-11-15 16:44:10

标签: bash shell scp

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

scp zumodo@shold:/test/test/test/server.py /test/test/test/test.py~/;

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

3 个答案:

答案 0 :(得分:48)

if ! cmp test.py test.py~ >/dev/null 2>&1
then
  # restart service
fi

打破这一点:

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

答案 1 :(得分:7)

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

答案 2 :(得分:0)

我会做类似

的事情
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)'