如何排除目录和文件压缩目录?
我需要压缩一个目录,不包括一些子目录和文件; 我用过这个:
zip -r zipfile.zip . -x ".*" -x "app/bower_components" -x "node_modules" -x "*.zip" -x "node_modules"
没有任何成功; node_modules
是主体文件夹中的文件夹,而bower_components
是文件夹app中的文件夹
我只是猜猜你想要什么。
-x ".*"
排除所有以点开头的文件
这样做:
-x .\*
排除所有文件(文件名中带一个点)
这样做:
-x \*.\*
–
-x "app/bower_components" -x "node_modules"
排除此目录及其中的所有文件
这样做:
-x app/bower_components/\* -x node_modules/\*
–
-x "*.zip"
排除所有zip文件
这样做:
-x \*.zip
您将node_modules排除了两次
像这样的东西应该做的伎俩:
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
是要排除的目录和文件(扩展名)类型的列表。
这在Ubuntu 16.04上对我来说非常适合:
sudo zip -r /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*" -x "*.cache*" -x "*test*"
假设您的目录是一个git存储库(并且很可能是根据问题判断),您可以将要排除的目录添加到.gitignore
文件中,并使用git archive
命令来压缩目录的内容:
git archive --format=zip HEAD -o zipfile.zip
在您的示例中, .gitignore
文件必须如下所示:
node_modules app/bower_components
在每个项目中跳过node_modules,如下所示:
for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done