Wildcards

從 zip 存檔中排除子目錄——請解釋語法

  • July 22, 2019

我想遞歸壓縮文件夾,但排除某些目錄(temp/.hidden在下面的範例中)。我希望 zip 文件有一個頂級文件夾,temp如下例所示,因此我的工作目錄是temp.

mkdir -p temp/subdir
touch temp/subdir/keepthisfile.txt
touch temp/excludethisfile.txt
mkdir temp/.hidden
touch temp/.hidden/exclude.txt
cd temp/

我必須實現我想要的程式碼是

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden/* ../temp/.hidden/

或者更簡潔(從網上其他地方收集的語法)

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/*.hidden*

我可以明白為什麼這會起作用,但我不明白為什麼下面的程式碼不能做同樣的事情(即為什麼我需要../temp/*.hidden*而不是僅僅需要../temp/.hidden*?)

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden*

在執行 Zip 之前,您的 shell 會擴展../temp/.hidden*為;../temp/.hidden此模式不再匹配../temp/.hidden/exclude.txt。您應該按照 Zip 手冊頁的建議引用該模式:

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt '../temp/.hidden*'

謝謝!現在有了正確的 RFTM,我的手冊頁建議

反斜杠避免了 shell 文件名替換,因此名稱匹配由 zip 在所有目錄級別執行。

所以程式碼變成了 zip -r temp.zip ../temp/ -x ../temp/exclude.txt ../temp/.hidden/*

我更喜歡引用:)

引用自:https://unix.stackexchange.com/questions/424394