2010年8月9日

[shell script] 驗證 tar 解壓縮的執行結果

前陣子在用 tar 解壓縮更新程式的時候,發現某個檔案沒有被正確被覆蓋,經過確認,tar 指令的確有用到 -m 參數 (用法參考:這篇),難道是 tar 這個全世界用了 N 年的工具出了問題?

雖然最後證實那個檔案是因為其他的原因被還原到舊版,但是在那段真相水落石出之前的空窗期我寫了一個短短的 script 來驗證 tar 的執行結果,完整程式碼如下:

#!/bin/bash
#created by Tim, verify the tar unzip operation is successful
#this file should be put in the /tmp directory

#read the log file from the output of "tar -zxvfm XXX.tar.gz > /tmp/tar.log" command

BASEDIR=`pwd`  cd /tmp
files=`cat tar.log`
count=0

for file in $files
do
   #check the last modified date of each file, it should be the same
   ls -l "$BASEDIR/$file" 
   count=`expr $count + 1`
done
echo "count: $count"

#verify files count
#precondition: there should be only 1 .tar.gz file in the /tmp directory
#the number of files in the .tar.gz file
tarCount=`tar -tv -f *.tar.gz | wc -l`   
echo "tarCount: $tarCount"

if [ $count -eq $tarCount ]; then

   echo "file count check OK!"
else
   echo "file count check FAILED!!"
fi 

程式很單純,只是先利用 tar 的 -v (verbose) 參數把執行過程中解壓縮的
檔案相對路徑紀錄到 /tmp 下的 tar.log 檔,而後逐一比對 log 檔中的
路徑與目前系統中實際的檔案修改時間是否相同,最後會比較 tar 檔中
所含的檔案數量與 tar.log 檔中紀錄到的檔案數量是否一致。 
 
雖然這程式應該沒啥用 (tar 出問題的機率超低),但還是擺著備忘一下,
當作 shell script 的範本也好 :p 

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D