需求:bash
一、因爲設備剛出廠是沒有資源和文件,可是因爲連接了網絡,平臺會給他下發高版本的portal版本,致使U盤更新是隻會更新資源文件,可是數據文件不會更新,致使了一部分的功能不可用。網絡
二、設備確實的東西指數屬於小資源,可是影響卻很大,咱們只要portal版本高於U盤版本就不容許把portal版本回退,這樣會致使上線的東西白作了,因此不容許U盤更新是版本回退,所以須要差別更新。ide
步驟:spa
一、首先判斷設備主體目錄和U盤主體目錄是否同樣,如果設備的目錄沒有直接從U盤把整個目錄拷貝過去,如果設備上有U盤上沒有,就能夠忽略(差別更新是以U盤更新到設備上的故而忽略)。排序
二、把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