Как мне сжать папку, но исключить подпапку.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...