如何透過終端機建立整個目錄的 zip 檔案而不包含隱藏檔案?

如何透過終端機建立整個目錄的 zip 檔案而不包含隱藏檔案?

我有一個項目,其中有很多隱藏的資料夾/文件。我想創建它的 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 -@

相關內容