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

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

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

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

zip -r zipfile.zip directory

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

zip -r zipfile.zip directory -x .*

Не сработало. Все скрытые каталоги остались в zip-файле.

решение1

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

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

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-архива

Заархивируйте каталог, за исключением .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 "*/\.*"

решение2

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

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

решение3

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

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

решение4

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

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

Связанный контент