使用zip壓縮時避免不需要的目錄


概述

在Linux系統上有很多不同的方法來壓縮和收集檔案。我們有幾種選擇:使用命令列工具、GUI應用程式。

但是,如果我們與Windows或Mac使用者共享檔案,ZIP檔案仍然是最方便的選擇。我們希望保持其便利性。

我們將瞭解如何組織我們的檔案,以便它們不會被不必要的資料夾弄亂。我們將學習一些基本的 檔案管理技巧。如果您手動操作,這些技巧可能看起來很明顯,但當您使用指令碼時可能會變得棘手。

我們將使用bash shell內建的push/pop命令來解決這個問題。

使用-r選項壓縮所有內容

當我們的朋友或同事下載我們傳送給他們的ZIP檔案時,我們通常希望保留基本的資料夾層次結構。我們可以使用zip命令的-r選項來做到這一點。

假設我們要包含我們twine JS/src/vue資料夾及其下面的所有內容。

~$ ls -R /home/allan/Source/twinejs/src/vue/
/home/a/Source/twinejs/src/vue/:
codemirror-theme.less directives index.less mixins transitions.less

/home/allan/Source/twinejs/src/vue/directives:
mouse-scrolling.js mouse-scrolling.less

/home/allan/Source/twinejs/src/vue/mixins:
dom-events.spec.js mount-to.js

有很多檔案,分佈在三個單獨的目錄中。如果我們使用`zip`壓縮樹中的每個目錄,我們將得到這個結果-

~$ zip -r ~/twine-vue.zip /home/allan/Source/twinejs/src/vue
 updating: home/allan/Source/twinejs/src/vue/ (stored 0%)
   adding: home/allan/Source/twinejs/src/vue/codemirror-theme.less (deflated 73%)
   adding: home/allan/Source/twinejs/src/vue/directives/ (stored 0%)
   adding: home/allan/Source/twinejs/src/vue/directives/mouse-scrolling.less (deflated 37%)
   adding: home/allan/Source/twinejs/src/vue/directives/mouse-scrolling.js (deflated 68%)
   adding: home/allan/Source/twinejs/src/vue/index.less (stored 0%)
   adding: home/allan/Source/twinejs/src/vue/mixins/ (stored 0%)
   adding: home/allan/Source/twinejs/src/vue/mixins/mount-to.js (deflated 31%)
   adding: home/allan/Source/twinejs/src/vue/mixins/dom-events.spec.js (deflated 69%)
   adding: home/allan/Source/twinejs/src/vue/transitions.less (deflated 63%)

我們不想給他完整的路徑;否則他必須遍歷幾個資料夾才能到達檔案。

如果我們必須手動存檔我們的檔案,我們將能夠進入我們想要捕獲的目錄(vue),但這在shell中會很麻煩。如果有一個選項或方法可以避免這種情況就好了!

使用-j選項刪除所有目錄

-j選項會“刪除”新增到ZIP存檔中每個新檔案的目錄。它類似於basename命令:它只保留新檔案的名稱,丟棄其路徑中的任何目錄名稱。

讓我們試一試,看看是否能讓我們更接近我們真正需要的。

~$ zip -rj ~/twine-vue.zip /home/a/Source/twinejs/src/vue
   adding: codemirror-theme.less (deflated 73%)
   adding: mouse-scrolling.less (deflated 37%)
   adding: mouse-scrolling.js (deflated 68%)
   adding: index.less (stored 0%)
   adding: mount-to.js (deflated 31%)
   adding: dom-events.spec.js (deflated 69%)
   adding: transitions.less (deflated 63%)

它並不完全正確。如果我們解壓此檔案,它將把其內容散佈在我們朋友的“下載”目錄中。我們可以改用命令列工具“cd”(更改目錄)。

pushdpopd作為一種更好的cd方法

透過使我們的指令碼更健壯,我們可以使用shell中的pushdir()函式將我們傳送到我們想要所在的目錄,並跟蹤我們從哪裡開始。

pushd進入我們的方式

pushd對於從/usr/local/bin執行指令碼非常有用。我們稍後將看到一個示例。

/usr/local/bin$ pushd /home/a/Source/twinejs/src/
~/Source/twinejs/src /usr/local

pushd將我們移動到我們指定的目錄,然後返回當前工作目錄。我們用它來導航回到我們的原始位置。

我們現在位於vue正上方的資料夾中,可以使用-r選項將其壓縮。

~/Source/twinejs/src$ zip -r ~/twine-vue.zip vue/
   adding: vue/ (stored 0%)
   adding: vue/codemirror-theme.less (deflated 73%)
   adding: vue/directives/ (stored 0%)
   adding: vue/directives/mouse-scrolling.less (deflated 37%)
   adding: vue/directives/mouse-scrolling.js (deflated 68%)
   adding: vue/index.less (stored 0%)
   adding: vue/mixins/ (stored 0%)
   adding: vue/mixins/mount-to.js (deflated 31%)
   adding: vue/mixins/dom-events.spec.js (deflated 69%)
   adding: vue/transitions.less (deflated 63%)

當他們從我們這裡解壓我們的檔案時,我們的ZIP檔案接收者會得到一個很好地組織在一個資料夾中的所有內容。

popd再次退出

當我們的指令碼需要返回到其原始位置時,我們使用popdir。我們現在或稍後都可以這樣做——無論我們在當前工作目錄中的哪個位置,我們最終都會回到我們開始的目錄。

~/Source/twinejs/src$ popd
/usr/local/bin
/usr/local/bin$

我們回到了/usr/local/bin,這是一個方便我們儲存指令碼的地方。現在讓我們執行它們。

結論

我們使用了一個有用的shell命令來避免ZIP存檔中出現不需要的多餘資料夾。

如果我們只使用一種乾淨的方法來組織我們的檔案,將會容易得多。

更新於:2022年12月23日

瀏覽量:123

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告