我有一個項目,其中有很多隱藏的資料夾/文件。我想創建它的 zip 存檔,但存檔中不應有任何隱藏的資料夾/檔案。如果隱藏資料夾中的檔案未隱藏,則也不應包含它們。
我知道我可以建立一個目錄的 zip 存檔,如下所示:
zip -r zipfile.zip directory
我還知道我可以使用 -x 選項排除文件,所以我認為這可能有效:
zip -r zipfile.zip directory -x .*
它不起作用。所有隱藏目錄仍在 zip 檔案中。
答案1
首先,如果您還沒有安裝 zip,請先安裝它,如下所示:
sudo apt-get install zip
然後簡單地建立一個 zip 檔案:
zip -r compressed_filename.zip foldername
如果要排除隱藏檔案:
find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@
從 Zip 檔案中排除文件 (取自http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)
建立 zip 檔案時檔案排除的基礎知識以標誌為中心
-x
,該標誌用於從存檔中排除與特定名稱或模式相符的檔案。最基本的,它看起來像這樣:zip archive.zip files -x "ExcludeMe"
這意味著您可以排除單個文件,假設它名為“Nothanks.jpg”
zip archive.zip images/ -x "Nothanks.jpg"
讓我們介紹一些有用的具體範例。
從 Zip 檔案中排除 .DS_Store 文件
這將防止通常不可見的 Mac 元資料
.DS_Store
檔案包含在預設情況下捆綁的 zip 檔案中:zip -r archivename.zip archivedirectory -x "*.DS_Store"
但是,如果目錄包含子目錄,您將需要使用該命令的另一種變體來從子目錄中排除 ds_store 檔案:
zip -r archive.zip directory -x "*/\.DS_Store"
注意:並非所有 shell 都需要引號才能使該指令正常運作,但在 bash shell(OS X 的預設設定)中,您將需要使用引號來排除通配符和模式。
從 Zip 檔案中排除特定檔案類型
使用通配符,您還可以透過關注擴展名來排除某種類型的所有檔案。例如,此命令將壓縮整個目錄,減去任何
.jpg
檔案:zip -r archive.zip directory -x "*.jpg"
可以針對檔案名稱中匹配的任何特定檔案副檔名或模式進行修改。
從 Zip 檔案中排除 .git 或 .svn 目錄
壓縮一個目錄,減去
.git
它的內容:zip -r zipdir.zip directorytozip -x "*.git*"
壓縮資料夾,不包含
.svn
目錄:zip -r zipped.zip directory -x "*.svn*"
從 Zip 檔案中排除所有隱藏文件
由於可以使用模式和通配符,因此您也可以排除透過以句點為前綴而建立的任何或所有不可見檔案和資料夾,無論它是像 這樣的目錄還是像或
.svn
那樣的單一檔案。.bash_profile
.htaccess
zip -r archivename.zip directorytozip -x "*.*"
或從所有子目錄中排除所有不可見檔案:
zip -r archive.zip directory -x "*/\.*"
答案2
這也排除了未隱藏目錄中的隱藏檔案:
find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
答案3
新增"
至.*
(否則,您的 shell 會擴展.*
到目前目錄中的點檔案),並排除子目錄中的隱藏檔案:
zip -r zipfile.zip . -x ".*" -x "*/.*"
這將導致以 a 開頭的檔案.
不會新增到您的 zip 檔案中。
rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x 2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x 2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
答案4
這項包括所有「.」。目錄、子目錄和“.”目錄中的文件或目錄...本質上是第一個答案,但包括頂級“。”文件。
find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@