用于排除目录和文件的Zip命令

时间:2012-01-17 16:59:57

标签: ssh directory centos zip

我正在尝试在centos 5中使用这个ssh命令来压缩目录中的文件夹和文件,但排除下面的示例。它不起作用。

zip -r file.zip * -x dir1 -x dir2 -x file1 -x file2

或者这个

zip -r file.zip * -x "dir1" -x "dir2" -x "file1" -x "file2"

它仍然只是拉上整个目录及其所有内容。我不想要dir1 dir2 file1 file2。

我需要知道要使用排除函数的正确-x语法。

4 个答案:

答案 0 :(得分:7)

对于我的特定系统,为了排除目录,我必须在我的排除目录周围加上引号,它就像一个魅力:

zip -r myarchive.zip target -x "target/exclude1/*" "target/exclude2/*"

注意:

- 这排除了要排除的目录和其中的所有文件。

- 您必须使用要包含和排除的目录的完整路径!

- 只要排除在行的末尾,您就不需要@符号

答案 1 :(得分:2)

-x选项有点奇怪;列出文件,从-x开始,以@符号结尾:

   zip file.zip -r * -x dir1 dir2 file1 file2 @

我也非常怀疑你在Unix系统上的文件名中想要\ ...确保你的路径没问题。 /是通常的路径分隔符。

示例:

mkdir tmp5
cd tmp5
touch a b c d e f g
zip foo.zip -r * -x e f g @
  adding: a (stored 0%)
  adding: b (stored 0%)
  adding: c (stored 0%)
  adding: d (stored 0%)

使用子目录,您可以使用通配符轻松省略其内容,但似乎*导致目录本身被包含(空):

mkdir x y z
touch {a,b,c} {x,y,z}/{a,b,c}
zip foo.zip -r * -x c y y/* z z/* @
  adding: a (stored 0%)
  adding: b (stored 0%)
  adding: x/ (stored 0%)
  adding: x/b (stored 0%)
  adding: x/a (stored 0%)
  adding: x/c (stored 0%)
  adding: y/ (stored 0%)
  adding: z/ (stored 0%)

您可能最好省略*并明确列出您想要想要包含的内容......

zip core-latest-$version.zip -r cp images include mobile stats \
    -x cp/includes/configure.php @

(最后的\只是继续到下一行;你可以将它全部放在一行而不会尾随\

答案 2 :(得分:0)

根据我对 zip 命令的有限经验,似乎 -x 选项想要模式匹配文件的整个路径名。因此,如果您想排除 dir1 dir2 目录中的所有内容以及任何名为 file1 file2 的文件,请尝试以下操作:

zip -r file.zip * -x 'dir1/*' 'dir2/*' '*/file1' '*/file2'

您的方式只会排除在根级别与这些名称完全匹配的文件和目录。

答案 3 :(得分:-1)

如果您使用的是putty,请按照以下步骤操作:

  1. 输入您的目录:$ cd directory_name并按Enter
  2. 写命令:

    $ zip -r file_name.zip . -x \*excludingfolderName\*
    
  3. zip使用.获取当前目录后,*是通配符。