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之一, <()进程替代。

$DIFFvariables保持可打印的差异。 如果您想将其展示给最终用户,请确保将其双引号,例如echo "$DIFF"

如果你只想告诉用户有任何区别,如果可以缩短为[ "$(diff ...)" ] && echo "Difference found"

注意 :我假设最初的问题意味着让dir1dir2更有意义。 如果在时间0是dir ,然后在时间1 dir ,这种方法显然是行不通的。