shell脚本之对比不同目录的下的文件


让负责一部分代码的版本,担心公共目录下有人可能会稍微修改部分代码,因此把代码备份到自己的一个目录中,上传svn之前,如果发现公共目录的下的文件被修改,则找出变化部分,避免出现不可知的文件变化。

使用diff命令可以很容易的比较文件之间的差异,但是,如果要负责的文件比较多的话,那么一个个的比较是比较麻烦的因此,想写一个脚本文件,让它帮我对比文件之间的差异,偷懒嘛,O(∩_∩)O哈哈哈~

脚本内容如下:

#!/bin/bash
# @file        for_diff.sh
# @author      ymm
# @brief        比较不同目录下指定文件目录的差异
# @date        2014/2/28 16:18:10
# @History
# 1、2014/2/28 16:18:10  author ymm    初步完成


path_src=~/work/ymm/omc_account
path_desc=/opt/opthb/src/cpp/hla/account/omc_account


#只比较备份文件中的.cpp .h 和makefile文件,如需比较其他文件,可以指定
files=$(ls $path_src/*.cpp $path_src/*.h $path_src/makefile)
#files=$(ls $path_src/*)


for file in $files
do
    filename=$(basename $file )
    file_desc=${path_desc}/${filename}
   
    diff ${file} ${file_desc} 1>/dev/null 2>&1 && result=0 || result=1


    if [ "$result" == 1 ];then
        echo "$filename is diff"
    fi
done

用到的知识点:
1、通过basename可以通过文件的绝对路径获取文件名
2、1>/dev/null 2>&1 方法把输出重定向到“/dev/null”,也就是不输出
3、shell命令 && result=0 || result=1 通过变量来判断shell命令执行成功与否


需要注意的是:
使用“ls $path_src/*.cpp $path_src/*.h $path_src/makefile”命令指定了要比较的文件为源文件、头文件和makefile,如果希望对比目录的下的所有文件,不能使用“ls $path_src/” ,而要使用“ls $path_src/*”,比较不同,如下:

[www.bkjia.com@www.bkjia.com shell]$ ls /account/work/ymm/shell/test/*
/account/work/ymm/shell/test/for.sh      /account/work/ymm/shell/test/run
/account/work/ymm/shell/test/for_diff.sh  /account/work/ymm/shell/test/while.sh


[www.bkjia.com@www.bkjia.com shell]$ ls /account/work/ymm/shell/test/
for.sh  for_diff.sh  run  while.sh

可以看到,如果不加“*”的话,查看的文件都是不带路径的,这个时候再diff比较文件的话,比较的就是“path_src”目录下的文件,而是当前目录的了。希望大家注意。

自己的小打小闹,但是希望对大家有所帮助!

其实都是简单的操作,但是,我想着如果平常的一些很繁琐的事情都用shell脚本来实现的话,虽然不是一件多么有技术含量的事情,但我感觉这对于我自己来说,可以节省一些时间,而这样,我感觉就已经够了!努力学习进步ing!`

相关内容