Przede wszystkim, jeśli nie masz zainstalowanego zip, zainstaluj go najpierw w następujący sposób:
Podstawy wykluczania plików podczas tworzenia archiwum zip są wyśrodkowane wokół -x
flagi, która służy do wykluczania plików z archiwum, które pasują do określonej nazwy lub wzorca. W najbardziej podstawowej formie będzie to wyglądać tak:
zip archive.zip files -x "ExcludeMe"
Oznacza to, że możesz wykluczyć pojedynczy plik, powiedzmy, że ma on nazwę „Nothanks.jpg”
zip archive.zip images/ -x "Nothanks.jpg"
Omówmy kilka konkretnych przykładów, w których jest to przydatne.
Wyklucz pliki .DS_Store z archiwów Zip
Zapobiegnie to włączeniu zazwyczaj niewidocznych .DS_Store
plików metadanych Mac do archiwum zip, które są domyślnie zawarte w pakiecie:
zip -r archivename.zip archivedirectory -x "*.DS_Store"
Jeśli jednak katalog zawiera podkatalogi, możesz użyć innej odmiany tej komendy, aby wykluczyć również pliki ds_store z podkatalogów:
zip -r archive.zip directory -x "*/\.DS_Store"
Uwaga: nie wszystkie powłoki wymagają cudzysłowów, aby to polecenie działało poprawnie, ale w powłoce bash (domyślnej dla OS X) będziesz musiał użyć cudzysłowów do wykluczania ze znakami wieloznacznymi i wzorami.
Wyklucz określone typy plików z archiwum Zip
Za pomocą symboli wieloznacznych można również wykluczyć wszystkie pliki określonego typu, koncentrując się na rozszerzeniu. Na przykład to polecenie spakuje cały katalog, pomijając wszelkie .jpg
pliki:
zip -r archive.zip directory -x "*.jpg"
Można to zmodyfikować dla dowolnego określonego rozszerzenia pliku lub wzorca dopasowanego do nazwy pliku.
Wyklucz katalog .git lub .svn z archiwum Zip
Spakuj katalog minus .git
i jego zawartość:
zip -r zipdir.zip directorytozip -x "*.git*"
Zip folder, bez .svn
katalogu:
zip -r zipped.zip directory -x "*.svn*"
Wyklucz wszystkie ukryte pliki z archiwum Zip
Ponieważ można używać wzorców i symboli wieloznacznych, można również wykluczyć dowolne lub wszystkie niewidoczne pliki i foldery, które są tworzone przez poprzedzenie kropką, niezależnie od tego, czy jest to katalog podobny, .svn
czy pojedynczy plik, taki jak .bash_profile
lub .htaccess
.
zip -r archivename.zip directorytozip -x "*.*"
Lub, aby wykluczyć wszystkie niewidoczne pliki ze wszystkich podkatalogów:
zip -r archive.zip directory -x "*/\.*"
find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@
) jest dłuższe niż oczekiwano, ale działa dobrze. Uwzględniono także podkatalogi, więc +1 i zaakceptowana odpowiedź :-)