1. 程式人生 > >編寫差異更新腳本

編寫差異更新腳本

編寫差異更新腳本

需求:

1、由於設備剛出廠是沒有資源和文件,但是由於鏈接了網絡,平臺會給他下發高版本的portal版本,導致U盤更新是只會更新資源文件,但是數據文件不會更新,導致了一部分的功能不可用。

2、設備確實的東西指數屬於小資源,但是影響卻很大,我們只要portal版本高於U盤版本就不允許把portal版本回退,這樣會導致上線的東西白做了,所以不允許U盤更新是版本回退,因此需要差異更新。

步驟:

1、首先判斷設備主體目錄和U盤主體目錄是否一樣,若是設備的目錄沒有直接從U盤把整個目錄拷貝過去,若是設備上有U盤上沒有,就可以忽略(差異更新是以U盤更新到設備上的故而忽略)。

2、把U盤和設備上的文件做出列表,並排序,把前面不同的部分去掉,然後用diff做比對,+的既是設備不存在的,文件,然後直接創建文件夾,然後開始拷貝文件。


#創建文件夾
mkdir -p /mnt/disk/difffile
mkdir -p /mnt/disk/airmedia
#檢查設備上是否存在目錄不存在直接拷貝目錄
for file_dir in $(ls ${usb_file_dir}/)
	do
		#查找設備中是否存在要更新的目錄和文件
		find ${portal_file_dir}/${file_dir}/ -type f > /dev/null 2>&1
			if [ $? -eq 0 ];then #檢查設備上是否存在目錄不存在直接拷貝目錄
					#查找設備中已存在的文件
				find ${portal_file_dir}/${file_dir}/ -type f |awk '{ print $NF}'|xargs du -sk |sed "s#${dir_portal}/##g" |sort -k2,2> ${dir_diff}/portal_${file_dir}
					#查找U盤中已存在的文件
				find ${usb_file_dir}/${file_dir}/ -type f |awk '{ print $NF}'|xargs du -sk|sed "s#${dir_usb}/##g"|sort -k2,2  > ${dir_diff}/usb_${file_dir}
					#比較U盤中有但是portal中沒有的文件提取出來用作更新
				diff ${dir_diff}/portal_${file_dir} ${dir_diff}/usb_${file_dir} |grep  ^+|grep -v +++|awk '{print $2}' > ${dir_diff}/copy_file_${file_dir}
						#如果需要更新的文件不為空,拷貝更新的文件到目錄
					if [ -s copy_file_${file_dir} ];then	
							#循環創建目錄
						for mkdr in $(cat copy_file_${file_dir})
							do
				#cp在拷貝文件的時候不能把目錄結構一起拷貝,就把文件目錄也一起創建了,雖然很low,但是我也沒辦法了
								mkdir -p $(dirname ${dir_portal}/$mkdr) >/dev/null 2>&1
							done	
							#循環拷貝portal中沒有,但是U盤中有的文件
						for i in $(cat ${dir_diff}/copy_file_${file_dir})
							do 
								cp -rf /mnt/usb/$i /mnt/disk/airmedia/$i >/dev/null 2>&1
							done
					fi
			else
				cp -rf ${usb_file_dir}/${file_dir}/ ${portal_file_dir}/${file_dir}/ 
			fi
	done


編寫差異更新腳本