bash比较两个文件的内容,并根据结果执行两个不同的操作

bash比较两个文件的内容,并根据结果执行两个不同的操作,bash,diff,cmp,comm,Bash,Diff,Cmp,Comm,无法使用diff和cmp 我们能够成功地使用comm,但是当与条件in脚本一起使用时,我没有得到正确的结果 #!/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"

无法使用diffcmp

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

#!/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
#/bin/bash
# http://stackoverflow.com/a/14500821/175063

comm-23您应该能够使用:

! comm -3 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt) | grep -q '.*'

您应该能够使用:

! comm -3 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt) | grep -q '.*'

通过管道将
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

new_file_count=$(comm-13通过管道将
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


新建文件\u计数=$(comm-13
comm
即使在出现故障(如找不到文件)时也始终返回0。您需要检查stdout以查看
comm
是否有输出。文件是什么样子的?您知道
$?
是最后一个进程的退出状态,而不是行数吗?同上
$?
。此外,
comm-23
以旧格式返回行。不在new.txt中的txt。忽略new.txt中不在old.txt中的行。这是您想要的吗?是的,comm-23将显示文件名的差异。我非常确定退出代码不是本示例中需要的代码。我想查找文件夹中文件的内容是否有差异,以提醒我,或者erwise等待脚本下次运行。您是否可以使用
awk
comm
始终返回0,即使出现故障,例如找不到文件。您需要检查stdout以查看
comm
是否有输出。文件看起来像什么?您知道
$?
是上一个进程的退出状态,而不是行数?同上
$?
。另外,
comm-23
返回old.txt中不在new.txt中的行。new.txt中不在old.txt中的行将被忽略。这是您想要的吗?是的,comm-23将显示文件名的差异。我非常确定退出代码不是本例中所需的代码。我想查找是否存在di如果文件夹中的文件内容存在差异,请提醒我,否则请等到下次脚本运行时再执行。是否可以使用
awk
?不计算。这些文件是从供应商处更新的。例如,文件101.dat将更新为102.dat,文件101.dat将被删除。我们想知道在此示例中,是否会通知文件102.dat。这计算
new.txt
中不在
old.txt
中的行数。因此,计数将为
1
,因为
102.dat
在新文件中,但不在旧文件中。删除的行不计算,它们将按
comm-23
计算。不计算。这些文件是从供应商处更新的。与文件类似101.dat将更新为102.dat,文件101.dat将被删除。我们想知道在本例中,是否会通知文件102.dat。这将统计
new.txt
中不在
old.txt
中的行数。因此,计数将为
1
,因为
102.dat
在新文件中,但不在o中ld one。删除的行不计算在内,它们将由
comm-23
计算。这是我一直在寻找的解决方案!谢谢!!这是我一直在寻找的解决方案!谢谢!!