如何排除目录和文件压缩目录?


32

我需要压缩一个目录,其中不包括一些子目录和文件;我用这个:

zip -r zipfile.zip . -x ".*" -x "app/bower_components" -x "node_modules" -x "*.zip" -x "node_modules"

没有成功 node_modules是主体中的一个文件夹,而bower_components在文件夹应用程序内部


您的结果是什么,您的预期结果是什么?
DEN,

您要排除所有子目录还是仅排除其中一些?
Sergiy Kolodyazhnyy 2015年

Answers:


36

我只是猜测你想要什么。

-x ".*"

排除所有以点开头的文件

这样做:

-x .\*

排除所有文件(文件名中带有点)

这样做:

-x \*.\*

-

-x "app/bower_components" -x "node_modules"

排除此目录及其中的所有文件

这样做:

-x app/bower_components/\* -x node_modules/\*

-

-x "*.zip"

排除所有zip文件

这样做:

-x \*.zip

您两次排除了node_modules


2
谢谢,我收到了它,使用了各种帖子:zip -r * app / * -x \ app / bower_components / * -x \ node_modules / * -x * .zip
arpho

@arpho您的上述评论应该是一个答案,因为它似乎对我
有用

7

这样的事情应该可以解决问题:

zip -r zipped.zip dir1/ -x */\.* *.git* \.* *.zip *.csv *.json *.rb *.bak *.swp *.back *.merge *.txt *.sh dir1/node_modules/**\* dir1/bower_components/**\* dir1/dist/**.*

以下-x是要排除的目录和文件(扩展名)类型的列表。


现在,我知道该**\*是用于递归排除的。非常感谢。
德克·崔

6

假设您的目录是一个git存储库(根据问题来判断,很可能是这样),则可以将要排除的目录添加到.gitignore文件中,并使用git archive命令来压缩目录的内容:

git archive --format=zip HEAD -o zipfile.zip

在您的示例中,.gitignore文件必须看起来像这样:

node_modules
app/bower_components

3

这对我在Ubuntu 16.04上非常合适:

sudo zip -r /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*" -x "*.cache*" -x "*test*"

0

在每个项目中,像这样跳过node_modules:

for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.