Come posso creare un archivio zip di un'intera directory tramite terminale senza file nascosti?

197

Ho un progetto con un sacco di cartelle / file nascosti. Voglio creare un archivio zip di esso, ma nell'archivio non dovrebbero esserci cartelle / file nascosti. Se i file in una cartella nascosta non sono nascosti, non dovrebbero essere inclusi.

So che posso creare un archivio zip di una directory come questa:

zip -r zipfile.zip directory

So anche che posso escludere i file con l'opzione -x, quindi ho pensato che potesse funzionare:

zip -r zipfile.zip directory -x .*

Non ha funzionato. Tutte le directory nascoste erano ancora nel file zip.

    
posta Martin Thoma 27.08.2011 - 20:01

8 risposte

101

Questo esclude anche i file nascosti nelle directory non visualizzate:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip [email protected]
    
risposta data arrange 27.08.2011 - 21:27
81

Prima di tutto se non hai installato zip installalo prima come segue:

sudo apt-get install zip

Quindi per la semplice creazione di un file zip:

zip -r compressed_filename.zip foldername

Se vuoi escludere i file nascosti:

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

Esclusione di file da un archivio zip

Le basi dell'esclusione dei file durante la creazione di un archivio zip sono centrate attorno al flag -x , che viene utilizzato per escludere i file dall'archivio che corrispondono a un nome o modello specifico. Al suo livello più semplice, sarà simile a questo:

zip archive.zip files -x "ExcludeMe"

Significa che potresti escludere un singolo file, diciamo che si chiama "Nothanks.jpg"

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

Esaminiamo alcuni esempi specifici in cui è utile.

Escludi i file .DS_Store dagli archivi zip

Ciò impedirà che i file Mac di metadati% tipicamente invisibili di Mac non vengano inclusi in un archivio zip, che sono integrati in modo predefinito:

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

Se la directory include sottodirectory, tuttavia, ti consigliamo di utilizzare un'altra variante di quel comando per escludere anche i file ds_store dalle sottodirectory:

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

Nota: non tutte le shell richiedono che le virgolette per questo comando funzionino correttamente, ma nella shell bash (l'impostazione predefinita per OS X) sarà necessario utilizzare le virgolette per escludere con caratteri jolly e pattern.

Escludi tipi di file specifici da un archivio zip

Con i caratteri jolly, puoi anche escludere tutti i file di un certo tipo concentrandoti sull'estensione. Ad esempio, questo comando comprimerà un'intera directory, al netto di qualsiasi file .DS_Store :

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

Potrebbe essere modificato per qualsiasi estensione o modello specifico abbinato nel nome di un file.

Escludi la directory .git o .svn da un archivio zip

Comprimi una directory, meno .jpg e il suo contenuto:

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

Comprimi una cartella, senza includere la directory .git :

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

Escludi tutti i file nascosti da un archivio zip

Poiché è possibile utilizzare modelli e caratteri jolly, è possibile escludere tutti o alcuni file e cartelle invisibili creati in modo tale da essere preceduti da un punto, che si tratti di una directory come .svn o di un singolo file come .svn o .bash_profile .

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

O per escludere tutti i file invisibili da tutte le sottodirectory:

zip -r archive.zip directory -x "*/\.*"
    
risposta data M A K Ripon 11.08.2015 - 08:28
53

Aggiungi " a .* (altrimenti, la tua shell espande .* ai file punto nella directory corrente) ed esclude anche i file nascosti nelle sottodirectory:

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

In questo modo i file che iniziano con . non verranno aggiunti al file 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%)
    
risposta data Rinzwind 27.08.2011 - 21:17
8

Questo include tutto "." directory, sottodirectory e "." file o directory all'interno delle directory ... Essenzialmente la prima risposta, ma include il livello più alto "." File.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip [email protected]
    
risposta data cosimnot 01.11.2012 - 04:19
8

Esempio di esclusione di tutte le cartelle che iniziano con. :

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

Comprimi meglio ma più lento:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
    
risposta data Tigrouzen 21.05.2014 - 18:51
5

Il metodo corretto sarebbe:

zip -r zipfile.zip directory -x directory/.*
    
risposta data Rômulo Neves 08.05.2014 - 18:49
4

Mentre zippate le cartelle escludendo alcune estensioni di file:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
risposta data K-Gun 08.12.2014 - 18:49
3

Senza cartelle e file nascosti nella directory:

zip -r zipfile.zip directory/*

directory: % Co_de%

$ zip -r zipfile.zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)
    
risposta data Umanshield 15.02.2017 - 09:45

Leggi altre domande sui tag