无法使用差异,无法使用 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框。
答案 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
,因此它会打印新文件,因为这是您的消息建议您想要的内容。