天天看點

tar打包排除某個或多個子目錄 | AWK指令

2010年4月25日

a18ccms

下午遇到一個小問題:檔案目錄結構如下

/dir0-

-/dir1         <—該檔案很大,欲排除

-/dir2         <—該檔案很大,欲排除

-/dir3         <—目标目錄之一

-index.php  <—目标檔案之一

………….以下省略N個子目錄和子檔案………….

目錄下很多子目錄,而我需要打包。目标是   /wwwroot 下所有子檔案+/dir3 ,于是那些多餘的子目錄就讓我頭疼,

怎樣在不影響檔案結構的情況下打包呢,搜尋網上,很多人用下面這個方法:

幫助

tar

cvzf \home\all.

tar

.gz dir0  --exclude dir1 --exclude dir2

但是并不好,要是排除的部分是多出,要是子目錄過多,語句該要寫多久啊,後來又發現網上說可以直接使用排除參數X

建立檔案excludefiles在目前目錄中,内容為

cat

excludefiles

dir1

dir2

tar

-cvzf \home\all.

tar

.gz -X excludefile dir1

注意:

tar指令裡面的目标檔案是絕對路徑格式,excludefile裡面就也必須是絕對路徑;

tar指令裡面的目标檔案是相對路徑格式,excludefile裡面就也必須是相對路徑;

後來 搜尋找到了

自力部落格的一樣問題的文章

 說可以用 AWK 于是去搜尋了一下它:

Awk學習筆記

 發現它提供的語句可以精簡,可以這樣寫:

ls

-l |

awk

'\^-\ {print  $8}'

|

xargs

tar

cvfz \home\dir0.

tar

.gz

這個語句很好了解:

ls -l 列出所有檔案和目錄;

awk ‘\^-\ {print $8}’ 正則隻保留檔案行,獲得第八列的所有檔案名;

xargs tar 把上一步得到的名稱傳參給tar指令。

一切OK,輕松完成打包喽!