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

189

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

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

zip -r zipfile.zip directory

Také vím, že mohu vyloučit soubory s volbou -x, takže jsem si myslel, že to může fungovat:

zip -r zipfile.zip directory -x .*

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

    
dané Martin Thoma 27.08.2011 20:01

8 odpovědí

98

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
odpověděl arrange 27.08.2011 21:27
69

Nejprve pokud nemáte nainstalovaný zip, nainstalujte jej nejprve takto:

sudo apt-get install zip

Pro jednoduché vytvoření souboru ZIP:

zip -r compressed_filename.zip foldername

Chcete-li vyloučit skryté soubory:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@
    
odpověděl M A K Ripon 11.08.2015 08:28
52

Přidejte" do.* (jinak váš shell rozšiřuje.* na dotové soubory v aktuálním adresáři) a také vyloučit skryté soubory v podadresářích:

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

Výsledkem bude, že soubory, které začínají složkou., nebudou přidány do vašeho souboru ZIP.

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%)
    
odpověděl Rinzwind 27.08.2011 21:17
8

Toto zahrnuje všechny "." adresářů, podadresářů 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 -@
    
odpověděl cosimnot 01.11.2012 04:19
8

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 '.*'
    
odpověděl Tigrouzen 21.05.2014 18:51
5

Správná metoda by byla:

zip -r zipfile.zip directory -x directory/.*
    
odpověděl Rômulo Neves 08.05.2014 18:49
4

Zatímco zipování vylučuje některé přípony souborů:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
odpověděl K-Gun 08.12.2014 18:49
3

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%)
    
odpověděl Umanshield 15.02.2017 09:45