it-swarm.dev

Jak mohu vytvořit archiv ZIP celého adresáře přes terminál bez skrytých souborů?

Mám projekt se spoustou skrytých složek/souborů. Chci vytvořit zip archiv, ale v archivu by neměly být žádné skryté složky/soubory. Pokud soubory ve skryté složce nejsou skryté, neměly by být zahrnuty.

Vím, že mohu vytvořit archiv zip adresáře, jako je tento:

Zip -r zipfile.Zip directory

Vím také, že mohu vyloučit soubory s volbou -x, takže jsem si myslel, že by to mohlo fungovat:

Zip -r zipfile.Zip directory -x .*

Nefungovalo to. Všechny skryté adresáře byly stále v souboru ZIP.

238
Martin Thoma

To také vylučuje skryté soubory v skrytých adresářích:

find /full_path -path '*/.*' -Prune -o -type f -print | Zip ~/file.Zip [email protected]
114
arrange

Nejprve, pokud nemáte nainstalovaný Zip, nainstalujte jej nejprve následujícím způsobem:

Sudo apt-get install Zip

Pak jednoduše vytvořte soubor Zip:

Zip -r compressed_filename.Zip foldername

Pokud chcete vyloučit skryté soubory:

find /folder_path -path '*/.*' -Prune -o -type f -print | Zip ~/compressed_filename.Zip [email protected]

Vyloučení souborů z archivu ZIP (převzato z http://osxdaily.com/2013/04/30/how-to-exclude) -files-from-a-Zip-archive / )

Základy vyloučení souborů při vytváření archivu ZIP jsou soustředěny kolem příznaku -x, Který se používá k vyloučení souborů z archivu, které odpovídají určitému jménu nebo vzoru. Je to nejzákladnější, bude to vypadat takto:

Zip archive.Zip files -x "ExcludeMe"

To znamená, že byste mohli vyloučit jeden soubor, řekněme, že se jmenuje „Nothanks.jpg“

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

Podívejme se na několik konkrétních příkladů, kde je to užitečné.

Vyloučit soubory .DS_Store z archivů ZIP

Tím se zabrání tomu, aby byly do archivu ZIP zahrnuty obvykle neviditelné soubory metadat Mac .DS_Store, Které jsou ve výchozím nastavení seskupeny:

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

Pokud však adresář obsahuje podadresáře, budete chtít použít další variantu tohoto příkazu, abyste vyloučili i soubory ds_store z podadresářů:

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

Poznámka: Ne všechny skořepiny vyžadují, aby citace pro tento příkaz fungovaly správně, ale v bash Shell (výchozí pro OS X) budete muset použít uvozovky pro vyloučení s zástupnými znaky a vzory.

Vyloučit konkrétní typy souborů z archivu ZIP

U zástupných znaků můžete také zaměřením na příponu vyloučit všechny soubory určitého typu. Tento příkaz například zipuje celý adresář bez všech souborů .jpg:

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

To by bylo možné upravit pro jakoukoli konkrétní příponu souboru nebo vzor odpovídající názvu souboru.

Vyloučit adresář .git nebo .svn z archivu ZIP

Zip adresář, minus .git A jeho obsah:

Zip -r zipdir.Zip directorytozip -x "*.git*"

Zipovat složku bez zahrnutí adresáře .svn:

Zip -r zipped.Zip directory -x "*.svn*"

Vyloučit všechny skryté soubory z archivu ZIP

Protože lze použít vzory a zástupné znaky, můžete také vyloučit všechny nebo všechny neviditelné soubory a složky, které jsou vytvořeny tak, že budou předponou s tečkou, ať už je to adresář jako .svn Nebo samostatný soubor jako .bash_profile nebo .htaccess.

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

Nebo vyloučit všechny neviditelné soubory ze všech podadresářů:

Zip -r archive.Zip directory -x "*/\.*"
123
M.A.K. Ripon

Přidat " do .* (jinak se vaše Shell rozšíří .* do tečkových souborů v aktuálním adresáři) a také vyloučit skryté soubory v podadresářích:

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

Výsledkem budou soubory začínající znakem . nebude přidán do vašeho souboru Zip.

[email protected]:~/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
[email protected]:~/tmp$ Zip -r zipfile.Zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
[email protected]:~/tmp$ Zip -r zipfile.Zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
56
Rinzwind

Příklad pro vyloučení všech složek začínajících s. :

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

Lepší komprese, ale pomalejší:

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

Tento obsahuje všechny "." adresáře, podadresáře a „.“ soubory nebo adresáře v adresářích ... V podstatě první odpověď, ale zahrnuje nejvyšší úroveň “.” soubory.

find /full_path -path '*.*/.*' -Prune -o -type f -print | Zip ~/file.Zip [email protected]
9
cosimnot

Správná metoda by byla:

Zip -r zipfile.Zip directory -x directory/.*
7
Rômulo Neves

Při zipování adresářů s výjimkou nějaké přípony souboru:

$ cd /path/to/dir
$ Zip -r dir.Zip . -x "*.log" -x "*.cache"
5
K-Gun

Bez skrytých složek a souborů v adresáři:

Zip -r zipfile.Zip directory/*

adresář: |── .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%)
4
Vitaly