Рекурсивно сжимайте файлы в каталоге и подкаталогах с помощью инструмента командной строки «zip» в Mac OS X и исключайте файлы .DS_Store из ВСЕХ подпапок

10

Я пытаюсь создать ZIP-файл, используя zipинструмент командной строки , который поставляется с Mac OS X Terminal. Я хочу рекурсивно сжимать содержимое текущей папки, но исключая .DS_Storeфайлы. Я пытаюсь с этим:

zip -r myarchive.zip . -x .DS_Store

В -x .DS_StoreИсключая .DS_Storeфайл в текущей папке, но не в рекурсивно добавляются вложенные папки. Как мне исключить все .DS_Storeфайлы из ВСЕХ подпапок?

OMA
источник

Ответы:

17

Добавьте подстановочный знак в опцию исключения

zip -r myarchive.zip . -x "*.DS_Store"
fd0
источник
Спасибо за Ваш ответ. Это работает, но почему? :). Не могли бы вы объяснить?
ОМА
Расширение *расширяется до нуля или любой части пути, поскольку zip рекурсивно сжимает файлы и их каталоги. Итак, ./.DS_Storeто ./*/.DS_Storeи так далее исключаются из архива.
fd0
Ах, интересно. Таким образом, подстановочный знак работает иначе, чем в мире Windows, где «* .DS_Store» будет означать «любой файл, заканчивающийся на .DS_Store»
OMA
1

В большинстве случаев я хочу исключить все скрытые файлы, такие как .DS_Storeили .gitили.gitignore

С помощью одной простой команды вы можете позаботиться обо всем этом и рекурсивно сжать все файлы и подпапки.

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

Или даже лучше, создайте функцию в Zsh, чтобы сделать жизнь проще

open ~/.zshrc

Добавьте следующий код в раздел псевдонимов

function zip-visible(){
    zip -r $1 $2 -X -x "*/\.*"
}

Перезагрузите конфигурацию zsh

source ~/.zshrc

Используйте как это

zip-visible archive.zip folder

ALEV
источник