Как мне сжать папку, но исключить подпапку.git

Я пытаюсь создать ZIP-файл из папки, и я хотел бы исключить .git подпапка из полученного zip-файла.

Я перешел в родительскую папку той, которую хочу заархивировать (она называется bitvolution), и я делаю:

zip -r bitvolution.zip bitvolution -x ".git"

Но это не исключает .git подпапка.

Я пробовал разные комбинации, -x .git*, -x \.git/*, -x .git/\*, -x \.git/\*, Я также попытался использовать полный путь для аргумента исключения... но просто не получил там.

8 ответов

Решение

Правильное выражение -x *.git*поэтому полная команда должна быть:

zip -r bitvolution.zip bitvolution -x *.git*

Объяснение от http://selfsolved.com/problems/zip-command-exclude-svn-director:

Правильное заклинание

zip -9 -r --exclude=*.svn*  foo.zip [directory-to-compress]

Вы также можете добавить
--exclude=*.DS_Store* чтобы исключить надоедливые файлы метаданных отображения каталога Mac OS X.

Обратите внимание, что выражение передано --exclude использует весь исходный относительный путь к каталогу в качестве исходной строки для сопоставления. Так .svn/* само по себе не работает; подстановочный знак впереди гарантирует, что он совпадает .svn каталоги в любом месте дерева каталогов.

Если вы пытаетесь заархивировать проект, который хранится в Git, используйте git archive команда. Из исходного каталога:

git archive -o bitvolution.zip HEAD

Вы можете использовать любой коммит или идентификатор тега вместо HEAD архивировать проект в определенный момент.

Если вы хотите добавить префикс (например, папку верхнего уровня) к каждому файлу:

git archive -o bitvolution.zip --prefix=bitvolution/ HEAD

Вы также можете настроить уровень сжатия от 0 (без сжатия) до 9 (максимальное сжатие) включительно, например

git archive -o bitvolution.zip -9 HEAD

Другие варианты см. На странице справки (git help archive).

Я добавил обратную косую черту:

zip -r bitvolution.zip bitvolution -x \*.git\*

Страница man о обратной косой черте:

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

Предполагая, что на компьютере, на котором вы это делаете, установлен git, вы также можете использовать сам git для создания своего архива.

git archive --format=zip HEAD -o bitvolution.zip

Используйте следующий формат, если вы хотите игнорировать всю папку.

Например, игнорировать каждый node_modules папка, в каждой конечной точке:

zip -r API.zip API/* -x */node_modules/*

Вот пример того, что я использую:

zip -r workspace.zip workspace -x '*/.git/*' -x '*/.DS_Store/*' -x '*/build/*'

Если вы используете zsh, команда должна выглядеть так:

zip -r target_name.zip source_dir -x '/*.git/*'

Если вы используете: zip -r target_name.zip source_dir -x /*.git/*, без 'regex' zsh будет обрабатываться перед запуском zip. Вы получите сообщение об ошибке:

zsh: no matches found: /*.git/*

другой способ - использовать find , а затем исключить с помощью grep -v

      find . -type f|grep -v "*.git"|grep -v "node_modules"| zip myFIle.zip -@

выглядит проще для меня, вы можете grep -v другие строки, которых вы не хотите избегать. И если вы находитесь в Windows, используйте busybox...

Другие вопросы по тегам