使用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

开启你的职业生涯

完成课程获得认证

开始学习
广告