Hoe bestanden uit een zip-archief uit te sluiten

De eenvoudigste manier om veel specifieke bestanden of een groep overeenkomende bestanden uit een zip-archief uit te sluiten, is door het eenvoudige hulpprogramma voor zippen over te slaan dat is ingebouwd in de gebruiksvriendelijke gebruikersinterface van Mac OS X en om te schakelen naar de opdrachtregel, waar de krachtige opdracht voor zip zich bevindt.

Dit is handig om een ​​miljoen en één redenen, maar de primaire motivatie voor deze post heeft betrekking op de. DS_Store-bestanden die worden gebundeld met zip-archieven die op een Mac zijn gemaakt, alleen om een ​​andere machine die het bestand uitgepakt uit elkaar te rommelen, of het nu op een andere is Mac, Windows PC of Linux. Dat gebeurt zowel met het gebruiksvriendelijke zip-gereedschap als met het zip-hulpprogramma met de commandoregel, en dat komt omdat het standaardgedrag van de zipping-tools is om verborgen bestanden op te nemen, ongeacht of ze worden getoond of niet. Dat is niet noodzakelijk een slechte zaak en in veel gevallen zou het nuttig worden geacht, maar als je niet wilt dat ze, of een ander bestand voor die kwestie, verschijnen in je archieven, lees dan verder.

Bestanden uit een Zip-archief uitsluiten

De basisprincipes van bestandsuitsluiting bij het maken van een zip-archief zijn gecentreerd rond de vlag -x, die wordt gebruikt om bestanden uit het archief uit te sluiten die overeenkomen met een specifieke naam of patroon. Op het meest eenvoudige, ziet het er zo uit:

zip archive.zip files -x "ExcludeMe"

Dit betekent dat je een enkel bestand zou kunnen uitsluiten, bijvoorbeeld het heeft de naam "Nothanks.jpg"

zip archive.zip images/ -x "Nothanks.jpg"

Laten we een paar specifieke voorbeelden bespreken waar dit nuttig is.

Sluit .DS_Store Files van Zip Archives uit

Dit voorkomt dat de typisch onzichtbare Mac metadata. DS_Store-bestanden worden opgenomen in een zip-archief, die standaard zijn gebundeld:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

Als de map echter submappen bevat, wilt u een andere variant van die opdracht gebruiken om de ds_store-bestanden ook uit submappen uit te sluiten:

zip -r archive.zip directory -x "*/\.DS_Store"

Opmerking: niet alle shells vereisen dat de aanhalingstekens voor deze opdracht goed werken, maar in de bash-shell (de standaardinstelling voor OS X) moet u de aanhalingstekens gebruiken voor uitsluiting met jokertekens en patronen.

Specifieke bestandstypen uitsluiten van een ziparchief

Met jokertekens kun je ook alle bestanden van een bepaald type uitsluiten door je te richten op de extensie. Met deze opdracht wordt bijvoorbeeld een volledige map gezipt, minus eventuele JPG-bestanden:

zip -r archive.zip directory -x "*.jpg"

Dat zou kunnen worden gewijzigd voor elke specifieke bestandsextensie of patroon die overeenkomt met een bestandsnaam.

Sluit de .git of .svn Directory uit van een Zip-archief

Zip een map, minus .git en de inhoud ervan:
zip -r zipdir.zip directorytozip -x "*.git*"

Zip een map, zonder de .svn-map op te nemen:
zip -r zipped.zip directory -x "*.svn*"

Sluit alle verborgen bestanden uit een zip-archief

Omdat patronen en jokertekens kunnen worden gebruikt, kunt u ook alle of alle onzichtbare bestanden en mappen uitsluiten die zo zijn gemaakt door vooraf te worden gevolgd door een punt, of het nu een map is zoals .svn of een afzonderlijk bestand zoals .bash_profile of .htaccess.

zip -r archivename.zip directorytozip -x "*.*"

Of om alle onzichtbare bestanden van alle submappen uit te sluiten:

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

Proost op een commentator op de Macworld-forums voor de precieze syntaxis bij het uitsluiten van die bestanden ook uit subdirectories.

Uiteindelijk is dit gewoon een extra reden voor hoofdgebruikers om naar de terminal te gaan voor het maken van archieven. Met krachtige functies zoals ondersteuning voor jokertekens, uitsluiting en optionele wachtwoordbeveiliging van ritssluitingen, is deze gewoon veelzijdiger, en omdat het allemaal op de Mac is opgenomen, hoeft u geen andere app te downloaden om de geavanceerde functies te ondersteunen.

En ja, technisch gezien als je vastbesloten zou blijven om in de gebruikersinterface te blijven, zou je Finder en Spotlight-zoekoperatoren kunnen gebruiken om de inhoud van mappen in OS X te verfijnen voordat je een archief maakt, of gewoon Alles selecteren en handmatig Command + klikken op elk bestand om niet op te nemen, maar dat is echt niet efficiënt voor grote archiveringsoperaties. De terminal wint dus voor het gemak en ondanks gecentreerd te zijn rond de opdrachtregel, is het echt niet ingewikkeld als je eenmaal de basis hebt geleerd.