Vraag Hoe kan ik een zip-archief maken van een hele map via terminal zonder verborgen bestanden?


Ik heb een project met daarin veel verborgen mappen / bestanden. Ik wil er een zip-archief van maken, maar in het archief mogen geen verborgen mappen / bestanden zijn. Als bestanden in een verborgen map niet verborgen zijn, mogen ze ook niet worden opgenomen.

Ik weet dat ik een zip-archief van een map als deze kan maken:

zip -r zipfile.zip directory

Ik weet ook dat ik bestanden met de optie -x kan uitsluiten, dus ik dacht dat dit zou kunnen werken:

zip -r zipfile.zip directory -x .*

Het werkte niet. Alle verborgen mappen bevonden zich nog in het zip-bestand.


189
2017-08-27 18:01


oorsprong




antwoorden:


Dit sluit ook verborgen bestanden in niet-verborgen mappen uit:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

98
2017-08-27 19:27



Bedankt voor je antwoord. Het bevel (find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@) is langer dan verwacht, maar het werkt prima. Subdirectories zijn ook inbegrepen, dus +1 en een geaccepteerd antwoord :-) - Martin Thoma


Om te beginnen moet je het eerst als volgt installeren als je het nog niet hebt geïnstalleerd:

sudo apt-get install zip

Voor het eenvoudig aanmaken van een zip-bestand:

zip -r compressed_filename.zip foldername

Als u verborgen bestanden wilt uitsluiten:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@

67
2017-08-11 06:28



Bedankt voor je moeite om een ​​andere Ubuntu-gebruiker te helpen. Houd er rekening mee dat het opnieuw opnemen van het geaccepteerde antwoord in een nieuw antwoord de rommel alleen maar vergroot en de kans zeer groot is dat deze wordt gemarkeerd voor verwijdering. - hmayag


Toevoegen " naar de .* (anders wordt je shell groter .* naar de puntbestanden in de huidige map) en sluit ook verborgen bestanden in submappen uit:

zip -r zipfile.zip . -x ".*" -x "*/.*"

Dit zal resulteren in bestanden die beginnen met een . niet worden toegevoegd aan uw zipbestand.

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%)

52
2017-08-27 19:17



Ik denk niet dat je laatste verklaring correct is. .* zou worden uitgebreid door de schaal. - hammar
Ik denk dat het waarschijnlijk correct is, maar ik heb het verwijderd (niet zeker van) :) - Rinzwind
dit werkte niet. De .svn-mappen zijn toegevoegd - Martin Thoma
@moose Het patroon uitsluiten komt overeen met het volledige pad, niet alleen de bestandsnaam, dus u moet deze uitsluiten */.* net zoals .* (*/ komt overeen met een niet-lege reeks mappen). - Gilles
Dit werkt zonder iets te veranderen! Beste antwoord. - Whitecat


Deze bevat alle "." mappen, submappen en "." bestanden of mappen in mappen ... In wezen het eerste antwoord maar bevat het hoogste niveau "." bestanden.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

8
2017-11-01 03:19





Voorbeeld voor het uitsluiten van alle mappen die beginnen met. :

tar cvpzf folder.tgz folder/ --exclude '.*'

Beter comprimeren maar langzamer:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'

8
2018-05-21 16:51





De juiste methode zou zijn:

zip -r zipfile.zip directory -x directory/.*

5
2018-05-08 16:49



@downvoter: Wat is er mis, dit lijkt voor mij te werken. - jobin
Hetzelfde probleem als met Het originele antwoord van Rinzwind (nu gecorrigeerd): u sluit geen submappen uit. En zoals Rinzwind opmerkte, moet je de jokertekens citeren, anders breidt de schaal ze uit. - Gilles


Bij het ritsen van mappen zonder enige extensie:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"

4
2017-12-08 17:49





Zonder verborgen mappen en bestanden in map:

zip -r zipfile.zip directory/*

directory: |── .git │   ├── src │   └── Work.file ├── .test │   └── .file └── test.file

$ zip -r zipfile.zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)

3
2018-02-15 08:45