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

191

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

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

zip -r zipfile.zip directory

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

zip -r zipfile.zip directory -x .*

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

    
задан Martin Thoma 27.08.2011 в 18:01
источник

8 ответов

98

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
ответ дан arrange 27.08.2011 в 19:27
источник
72

Прежде всего, если вы не установили 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 -@
    
ответ дан M.A.K. Ripon 11.08.2015 в 06:28
источник
52

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

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

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

rinzwind@discworld:~/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
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
    
ответ дан Rinzwind 27.08.2011 в 19:17
источник
8

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

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
ответ дан cosimnot 01.11.2012 в 03:19
источник
8

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

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

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

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
    
ответ дан Tigrouzen 21.05.2014 в 16:51
источник
5

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

zip -r zipfile.zip directory -x directory/.*
    
ответ дан Rômulo Neves 08.05.2014 в 16:49
источник
4

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

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
ответ дан K-Gun 08.12.2014 в 17:49
источник
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.02.2017 в 08:45
источник

Ознакомьтесь с другими вопросами по меткам