Bash:在if语句中使用diff的结果
我正在写一个简单的Bash脚本来检测文件夹何时被修改。
这是非常接近的东西:
ls -lR $dir > a ls -lR $dir > b DIFF=$(diff ab) if [ $DIFF -ne 0 ] then echo "The directory was modified"
不幸的是,if语句显示错误:[:-ne:一元运算符预期
我不确定我的脚本有什么问题,请问有人能帮我吗?
非常感谢你!
Jary
ls -lR $dir > a ls -lR $dir > b DIFF=$(diff ab) if [ "$DIFF" != "" ] then echo "The directory was modified" fi
if ! diff -qab &>/dev/null; then >&2 echo "different" fi
您正在查找diff
的返回值,而不是您在示例代码中使用的diff
的输出。
尝试这个:
diff ab if [ $? -ne 0 ]; then echo "The directory was modified"; fi
DIFF=$(diff -u <(find dir1/ -type f -printf '%P\n' | sort) <(find dir2/ -type f -printf '%P\n' | sort)) if [ "$DIFF" ]; then echo "Directories differ" # Do other stuff here fi
这使用我最喜欢的bashisms之一, <()
进程替代。
$DIFF
variables保持可打印的差异。 如果您想将其展示给最终用户,请确保将其双引号,例如echo "$DIFF"
。
如果你只想告诉用户有任何区别,如果可以缩短为[ "$(diff ...)" ] && echo "Difference found"
注意 :我假设最初的问题意味着让dir1
和dir2
更有意义。 如果在时间0是dir
,然后在时间1 dir
,这种方法显然是行不通的。