我开始使用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
答案 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
返回 - 无用 - 输出)