我正在尝试在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语法。
-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 @
(最后的\
继续到下一行;你可以将它全部放在一行而没有尾随的\
)
对于我的特定系统,为了排除目录,我必须在我的排除目录周围加上引号,它就像一个魅力:
zip -r myarchive.zip target -x "target/exclude1/*" "target/exclude2/*"
笔记:
- 这排除了要排除的目录和其中的所有文件。
- 您必须使用要包含和排除的目录的完整路径!
- 只要排除在行的末尾,您就不需要@符号
如果您使用的是putty,请按照以下步骤操作:
$ cd directory_name
并按Enter键$ zip -r file_name.zip . -x \*excludingfolderName\*
在zip
之后使用.
作为当前目录,*
是一个通配符。