bash比较两个文件的内容并根据结果做两个不同的动作

时间:2016-07-12 00:22:23

标签: bash diff cmp comm

无法使用差异,无法使用 cmp

我们能够成功使用 comm ,但是当与脚本中的条件一起使用时,我得不到正确的结果。

#!/bin/bash
# http://stackoverflow.com/a/14500821/175063

comm -23 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt)
if [ $? -eq 0 ];then
   echo "There are no changes in the files"
else
   echo "New files were found. Return code was $?"
fi

它总是返回:

  

文件没有变化

作为comm命令,运行成功,但文件内容不同。

关于可以添加到此服务器的内容我非常有限,因为它是一个公司的LINUX框。

2 个答案:

答案 0 :(得分:3)

你应该可以使用:

dx

elif action == "Tutorial": os.system("C:\\Program Files (x86)\Windows Media Player\wmplayer.exe" "C:\\Users\Angus\Desktop\Test.mkv" 命令将成功(退出状态为0)是否发现任何差异,但! comm -3 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt) | grep -q '.*' 只有在找到匹配项时才会成功。 comm阻止grep打印匹配项,grep模式匹配任何。因此,-q如果输入非空,则成功。但是如果匹配,你想要成功,所以我在开头添加了'.*'来反转状态。

我还做了另一个更改:grep -q '.?'将打印第一个文件(old.txt)中的行而不是第二个文件(new.txt)中的行,但它不会打印行这是第二次但不是第一次。 !会打印其中一个文件所特有的所有行,因此它会在两个文件之间找到已删除的行。

BTW,测试comm -23是否为零是不必要的;只需将命令直接用作comm -3条件:

$?

答案 1 :(得分:0)

comm的输出传输到wc -l以查看是否找到了新文件。

new_file_count=$(comm -13 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt) | wc -l)
if [ $new_file_count -eq 0];then
   echo "There are no changes in the files"
else
   echo "New files were found. Count is $new_file_count"
fi

我更改了comm命令以使用-13,因此它会打印新文件,因为这是您的消息建议您想要的内容。