Rekurencyjnie kompresuj pliki w katalogu i podkatalogach za pomocą narzędzia „zip” wiersza polecenia w systemie Mac OS X i wyklucz pliki .DS_Store ze WSZYSTKICH podfolderów

10

Próbuję utworzyć plik ZIP za pomocą zipnarzędzia wiersza polecenia dostarczonego z terminalem Mac OS X. Chcę rekurencyjnie kompresować zawartość bieżącego folderu, ale z wyłączeniem .DS_Storeplików. Próbuję z tym:

zip -r myarchive.zip . -x .DS_Store

W -x .DS_StoreNie obejmuje .DS_Storeplików w bieżącym folderze, ale nie w rekursywnie dodanych podfolderów. Jak wykluczyć wszystkie .DS_Storepliki ze WSZYSTKICH podfolderów?

OMA
źródło

Odpowiedzi:

17

Dodaj symbol wieloznaczny do opcji wykluczenia

zip -r myarchive.zip . -x "*.DS_Store"
fd0
źródło
Dzięki za odpowiedź. Działa, ale dlaczego? :) Czy mógłbyś wyjaśnić?
OMA
W *rozszerza się do niczego lub dowolnej części ścieżki jako ZIP rekurencyjnie kompresuje pliki i ich katalogów. Tak więc ./.DS_Storewtedy ./*/.DS_Storei tak dalej są wykluczone z archiwum.
fd0,
Ach, ciekawe. Zatem symbol wieloznaczny działa inaczej niż w świecie Windows, gdzie „* .DS_Store” oznacza po prostu „każdy plik, który kończy się na .DS_Store”
OMA
1

Przez większość czasu chcę wykluczyć wszystkie ukryte pliki, takie jak .DS_Storelub .gitlub.gitignore

Za pomocą jednego prostego polecenia możesz zająć się tym wszystkim i rekurencyjnie kompresować wszystkie pliki i podfoldery

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

Lub jeszcze lepiej, utwórz funkcję w Zsh, aby ułatwić życie

open ~/.zshrc

Dodaj następujący kod w sekcji aliasów

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

Załaduj ponownie konfigurację zsh

source ~/.zshrc

Użyj w ten sposób

zip-visible archive.zip folder

alev
źródło