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

sve*_*n30 3 directory ssh zip centos

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

zip -r file.zip * -x dir1 -x dir2 -x file1 -x file2
Run Code Online (Sandbox Code Playgroud)

或者这个

zip -r file.zip * -x "dir1" -x "dir2" -x "file1" -x "file2"
Run Code Online (Sandbox Code Playgroud)

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

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

pat*_*der 8

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

zip -r myarchive.zip target -x "target/exclude1/*" "target/exclude2/*"
Run Code Online (Sandbox Code Playgroud)

笔记:

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

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

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


BRP*_*ock 7

这个-x选项有点奇怪;您列出文件,以 开头-x,以@符号结尾:

   zip file.zip -r * -x dir1 dir2 file1 file2 @
Run Code Online (Sandbox Code Playgroud)

我也严重怀疑你想\在 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%)
Run Code Online (Sandbox Code Playgroud)

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

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%)
Run Code Online (Sandbox Code Playgroud)

你可能更好地省略*,并明确列出你的那些东西希望包括...

zip core-latest-$version.zip -r cp images include mobile stats \
    -x cp/includes/configure.php @
Run Code Online (Sandbox Code Playgroud)

\最后只是继续到下一行;您可以将其全部放在一行中而没有尾随\