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_accountpath_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 $filesdo 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” fidone

用到的知识点: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.linuxidc.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.linuxidc.com shell]$ ls /account/work/ymm/shell/test/ for.sh for_diff.sh run while.sh

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

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

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

有的旅行是为了体验生活,感悟人生。

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

相关文章:

你感兴趣的文章:

标签云: