使用diff检查目录修改

时间:2013-02-03 02:08:03

标签: bash if-statement diff

我开始使用bash脚本编写,我正在编写一个脚本来备份目录,如果该目录自上次备份以来已被修改。我正在使用diff命令来检查这一点,但我想我可能没有正确使用它。

修改 我之间的差异是因为文件newFile和oldFile是在具有脚本的目录中创建的,并且是我尝试备份的目录。如何使用diff使其返回除这2个文件之外的差异?

ls -lR $1 > oldFile

while [ 0 ]; 
do

    ls -lR $1 > newFile

    if [ ! diff newFile oldFile ] ; then
  echo "they differ"

else

    echo "they don't differ" 
fi

 done

4 个答案:

答案 0 :(得分:1)

首先,if语句根本不起作用。使用方法:

if [ diff oldFile newFile ] ; then
    echo "they differ"
fi

注意[ ]括号! (请注意,它们并非真正的'括号'。[test命令的缩写,]是它的最后一个参数。疯狂,但很酷!


您可以使用

diff -rN OLD_DIR NEW_DIR

获得递归差异。 -N也会跟踪新文件

您也可以查看inotifywait和朋友。 Inotify是Linux内核中的一种机制,允许在inode(文件或目录,...)发生更改时注册挂钩。使用inotifywait(和恶魔),您可以注册一个shell脚本,该脚本将在感兴趣的文件/目录上发生的每个文件操作中触发。在该脚本中,您可以在更改后直接进行备份(如果需要)

答案 1 :(得分:0)

小搜索会显示:Bash: using a the result of a diff in a if statement

DIFF=$(diff newfile oldfile) 
if [ "$DIFF" != "" ]; then
    ...

答案 2 :(得分:0)

您还可以使用md5deep对目录中的文件进行哈希处理,然后对该命令的输出进行哈希处理以获得最终校验和:

hash=$(md5deep -rs folder | md5sum)

答案 3 :(得分:0)

代码中diff周围的括号不是强制性的,这个想法是if语句自己测试后面命令的返回码。因此,无需再次致电test。你也可以写:

if diff -q newFile oldFile &> /dev/null ; then...

(重定向到/ dev / null因为diff返回 - 无用 - 输出)