2011-07-15 22 views
3

這裏歸檔下隱藏的文件是我想存檔的文件夾的目錄結構:ZIP不會在主

DIR結構

HOME 
HOME/.abc 
HOME/FIRST 
HOME/FIRST/.def 

我使用simlpe $PATCH/zip -r -l -x "bac*" abc.zip HOME/*

一有趣的是,我忽略了它是直接在HOME下跳過隱藏文件夾,並將它壓在FIRST下面。我在這裏錯過了什麼?我選擇的選項有沒有副作用?請提前幫助感謝。

回答

8

*不是由zip實用程序解釋,而是由shell進行擴展。在執行zip實用程序之前,*被空格分隔的所有非隱藏文件或目錄列表所取代。

你可以用$PATCH/zip替換爲echo來證明這一點,它會在shell修改後顯示實際傳遞給程序的參數。


如果設置環境變量GLOBIGNORE.:..,不僅會打壞禁用...匹配,它有也自動啓用「dotglob」,其中其他隱藏的文件相匹配,而不漂亮的效果需要.*,所以你可以只使用*的一切。

例如,這應該解決您的問題:

GLOBIGNORE=.:..; $PATCH/zip -r -l -x "bac*" abc.zip HOME/*; unset GLOBIGNORE 

請注意,你不能做到這一小段路,或者在一個命令:

GLOBIGNORE=.:.. $PATCH/zip -r -l -x "bac*" abc.zip HOME/* 

看來,bash中沒有注意到這直到下一個命令。使用

+0

這就是完全相同的問題..感謝桑德蘭 – Ram

+0

現在怎麼能我指定的命令,使其也拉鍊在首頁隱藏文件? HOME /.*不起作用,因爲它包含..目錄也 – Ram

+0

如果您將環境變量GLOBIGNORE設置爲'。:..',不僅bash將禁用'.'和'..'的匹配,它具有自動啓用'dotglob'的好效果,它可以在不需要'。*'的情況下與其他隱藏文件相匹配,因此您可以使用'*'來處理所有事情。 –

9
zip archiveName -r .* -x "../*" 

把戲SI。*和排除../*