У меня есть проект с большим количеством скрытых папок/файлов. Я хочу создать его 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 -@