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

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

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

zip -r zipfile.zip directory

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

zip -r zipfile.zip directory -x .*

Это не сработало. Все скрытые каталоги по-прежнему находились в zip-файле.

Прежде всего, если у вас еще не установлен 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 -@

Исключение файлов из Zip-архива(взято из http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Основы исключения файлов при создании zip-архива сосредоточены вокруг -x флаг, который используется для исключения из архива файлов, соответствующих определенному имени или шаблону. В самом общем виде это будет выглядеть так:

zip archive.zip files -x "ExcludeMe"

Это означает, что вы могли бы исключить один файл, скажем, с именем “Nothanks.jpg ”

zip archive.zip images/ -x "Nothanks.jpg"

Давайте рассмотрим несколько конкретных примеров, где это полезно.

Исключать.Файлы DS_Store из Zip-архивов

Это предотвратит обычно невидимые метаданные Mac .DS_Store файлы, включенные в zip-архив, которые по умолчанию включены в пакет:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

Однако, если каталог содержит подкаталоги, вы захотите использовать другой вариант этой команды, чтобы также исключить файлы ds_store из подкаталогов:

zip -r archive.zip directory -x "*/\.DS_Store"

Примечание: не все оболочки требуют кавычек для правильной работы этой команды, но в оболочке bash (по умолчанию для OS X) вам нужно будет использовать кавычки для исключения с помощью подстановочных знаков и шаблонов.

Исключить определенные типы файлов из Zip-архива

С помощью подстановочных знаков вы также можете исключить все файлы определенного типа, сосредоточив внимание на расширении. Например, эта команда заархивирует весь каталог за вычетом любых .jpg файлы:

zip -r archive.zip directory -x "*.jpg"

Это может быть изменено для любого конкретного расширения файла или шаблона, соответствующего имени файла.

Исключить каталог .git или .svn из Zip-архива

Zip-архив каталога, минус .git и это содержание:

zip -r zipdir.zip directorytozip -x "*.git*"

Заархивируйте папку, не включая .svn каталог:

zip -r zipped.zip directory -x "*.svn*"

Исключить все скрытые файлы из Zip-архива

Поскольку можно использовать шаблоны и подстановочные знаки, вы также можете исключить любые или все невидимые файлы и папки, которые созданы таким образом с помощью префикса точки, будь то каталог типа .svn или отдельный файл, такой как .bash_profile или .htaccess.

zip -r archivename.zip directorytozip -x "*.*"

Или исключить все невидимые файлы из всех подкаталогов:

zip -r archive.zip directory -x "*/\.*"

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

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

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

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

rinzwind@discworld:~/tmp$ ls -ladrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmpdrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmprinzwind@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%)

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

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

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

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'

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

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

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

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

При архивировании каталогов, исключая некоторые расширения файлов:

$ cd /path/to/dir$ zip -r dir.zip . -x "*.log" -x "*.cache"

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

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%)