【发布时间】:2016-11-14 01:29:38
【问题描述】:
不能使用diff,也不能使用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 机器。
【问题讨论】:
-
comm始终返回 0,即使在失败时(例如找不到文件)。您需要检查 stdout 以查看comm是否有输出。 -
文件是什么样的?你知道
$?是最后一个进程的退出状态而不是行数吗? -
$?同上。此外,comm -23在 old.txt 中返回不在 new.txt 中的行。 new.txt 中不在 old.txt 中的行将被忽略。这就是你想要的吗? -
是的 comm -23 将显示文件名的差异。我很确定退出代码不是本示例所需要的。我要查找文件夹中的文件内容是否有差异来提醒我,否则等到下次脚本运行时。
-
你能用
awk吗?