歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> shell腳本之對比不同目錄的下的文件

shell腳本之對比不同目錄的下的文件

日期:2017/2/28 14:35:03   编辑: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/*”,比較不同,如下:

[[email protected] 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


[[email protected] shell]$ ls /account/work/ymm/shell/test/
for.sh for_diff.sh run while.sh

可以看到,如果不加“*”的話,查看的文件都是不帶路徑的,這個時候再diff比較文件的話,比較的就是“path_src”目錄下的文件,而是當前目錄的了。希望大家注意。

自己的小打小鬧,但是希望對大家有所幫助!

其實都是簡單的操作,但是,我想著如果平常的一些很繁瑣的事情都用shell腳本來實現的話,雖然不是一件多麼有技術含量的事情,但我感覺這對於我自己來說,可以節省一些時間,而這樣,我感覺就已經夠了!努力學習進步ing!`

Copyright © Linux教程網 All Rights Reserved