Как создать zip-архив целой директории через терминал без скрытых файлов?

У меня есть проект с большим количеством скрытых папок /файлов. Я хочу создать его zip-архив, но в архиве не должно быть никаких скрытых папок /файлов. Если файлы в скрытой папке не скрыты, их также не следует включать.

Я знаю, что я могу создать zip-архив каталога вроде этого:

zip -r zipfile.zip directory

Я также знаю, что я могу исключить файлы с опцией -x, поэтому я думал, что это может сработать:

zip -r zipfile.zip directory -x .*

Это не сработало. Все скрытые каталоги все еще были в zip-файле.

187 голосов | спросил Martin Thoma 27 PM000000100000003331 2011, 22:01:33

8 ответов


98

Это также исключает скрытые файлы в незакрытых каталогах:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip [email protected]
ответил arrange 27 PM000000110000002731 2011, 23:27:27
66

Прежде всего, если вы не установили zip, установите его в первую очередь следующим образом:

sudo apt-get install zip

Затем для простого создания zip-файла:

zip -r compressed_filename.zip foldername

Если вы хотите исключить скрытые файлы:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip [email protected]
ответил M A K Ripon 11 AM00000090000000731 2015, 09:28:07
52

Добавить " в .* (в противном случае ваша оболочка расширяет .* до точечных файлов в текущем каталоге), а также исключить скрытые файлы в подкаталогах:

zip -r zipfile.zip . -x ".*" -x "*/.*"

Это приведет к тому, что файлы, начинающиеся с ., не будут добавлены в ваш zip-файл.

[email protected]:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
[email protected]:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
[email protected]:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
ответил Rinzwind 27 PM000000110000000331 2011, 23:17:03
8

Этот включает все "." каталоги, подкаталоги и "." файлы или каталоги в каталогах ... По сути, первый ответ, но включает верхний уровень "." файлы.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip [email protected]
ответил cosimnot 1 42012vEurope/Moscow11bEurope/MoscowThu, 01 Nov 2012 07:19:02 +0400 2012, 07:19:02
8

Пример исключения всех папок, начинающихся с.

tar cvpzf folder.tgz folder/ --exclude '.*'

Лучше сжать, но медленнее:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
ответил Tigrouzen 21 Maypm14 2014, 20:51:36
5

Правильный метод:

zip -r zipfile.zip directory -x directory/.*
ответил Rômulo Neves 8 Maypm14 2014, 20:49:05
4

В то время как zipping dirs исключает некоторое расширение файла:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
ответил K-Gun 8 MonEurope/Moscow2014-12-08T20:49:46+03:00Europe/Moscow12bEurope/MoscowMon, 08 Dec 2014 20:49:46 +0300 2014, 20:49:46
3

Без скрытых папок и файлов в каталоге:

zip -r zipfile.zip directory/*

Каталог: |── .git │   ├── src │   └── Work.file ├── .test │   └── .file └── test.file

$ zip -r zipfile.zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)
ответил Umanshield 15 FebruaryEurope/MoscowbWed, 15 Feb 2017 11:45:42 +0300000000amWed, 15 Feb 2017 11:45:42 +030017 2017, 11:45:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132