2010-12-03 62 views
0

嘿, 我需要tar某個目錄中的所有目錄。我有兩個問題,我不斷收到隱藏的目錄,這是我不想要的,我需要將它們放在其他地方,一旦它們被塗抹。有關目錄tarring腳本的簡短問題

這裏是我現在做:

for file in $(find /data/shares/builds/place1/ -maxdepth 1 -type d \(! -regex '.*' \));do tar zcf ../Place2_$1_$timeStamp/$file.tar.gz $file;done 

我仍然得到隱藏的文件,我得到了第一的位置不存在的錯誤。我得到的消息:

../Place2_1.0.1_1012031412//data/shares/builds/Place1/Project1.tar.gz:無法打開:沒有這樣的文件或目錄

任何人都看不到,我可以是否解決這個問題?

回答

2

首先,您的查找命令不正確(嘗試單獨測試)。

這find命令應該給你的目錄列表,你想:

find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*' 

(你需要-mindepth 1,以避免列出包含目錄本身,而-name工作,你打算,而你的正則表達式!方法不)。

其次,注意發現的輸出包括每個目錄的完整路徑(如「/數據/股/構建/ PLACE1/PROJECT1」這樣是整個字符串被分配到$ file變量,從而結束了你試圖創建的新tar文件的目標「filename」,這可能不是你真正想要的 - 我期望你正在嘗試創建新的tarball,例如「../Place2_1.0.1_1012031412/Project1 。名爲.tar.gz」假如這樣,使用basename從路徑脫光目錄事情是這樣的:

for file in $(
    find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*' 
); do tar zcf ../Place2_$1_$timeStamp/$(basename $file).tar.gz $file;done 

最後,請注意,您將需要創建您的Place2手動預先設置_ $ 1_ $ timestamp目錄。

+0

感謝您的非常徹底的迴應。我對unix很陌生,所以我非常感謝這個令人敬畏的解釋。對於延遲接受你的答案感到抱歉。 – PFranchise 2010-12-06 04:07:41