在bash中递归地压缩所有文件和文件夹

时间:2014-04-28 11:58:26

标签: bash cygwin zip

我正在开发一个项目,项目的编译涉及到,选择性地压缩各种文件和文件夹以及子文件夹(html / css / js)。在Windows平台上工作,我可以继续使用CTRL + A然后按住SHIFT键单击取消选择,但确实有点单调乏味。我正在使用cygwin,所以我想知道是否有可能在一个命令中发出命令以递归方式拉出所选文件/文件夹,同时排除其他文件/文件夹?我已经安装了zip命令,但我似乎也在拉紧当前的zip文件和.svn文件。

如果可能的话,我希望将其合并到shell脚本中,因此越简单越好。

2 个答案:

答案 0 :(得分:2)

阅读完手册之后,我认为我正在寻找的解决方案如下:

  • 需要递归目录(-r),
  • 需要排除certail文件/目录(-x)
  • 它适用于当前目录,但是。可以用任何目录的路径替换

    zip -x directories_to_exclude -r codebase_latest.zip。

我已将其合并到一个简短的shell脚本中,该脚本删除文件,整理一些代码,然后根据需要压缩所有文件。

答案 1 :(得分:1)

您应该阅读zip命令的手册页:

-R
       --recurse-patterns
              Travel the directory structure recursively starting at the current directory; for example:

                     zip -R foo "*.c"

              In this case, all the files matching *.c in the tree starting at the current directory are stored into a zip archive named foo.zip.  Note that *.c will match
              file.c, a/file.c and a/b/.c.  More than one pattern can be listed as separate arguments.  Note for PKZIP users: the equivalent command is

                     pkzip -rP foo *.c

              Patterns  are relative file paths as they appear in the archive, or will after zipping, and can have optional wildcards in them.  For example, given the cur‐
              rent directory is foo and under it are directories foo1 and foo2 and in foo1 is the file bar.c,

                     zip -R foo/*

              will zip up foo, foo/foo1, foo/foo1/bar.c, and foo/foo2.

                     zip -R */bar.c

              will zip up foo/foo1/bar.c.  See the note for -r on escaping wildcards.

您还可以查看HERE