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


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.


189
2017-08-27 18:01


origine




risposte:


Ciò esclude anche i file nascosti in directory non nascoste:

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

98
2017-08-27 19:27



Grazie per la tua risposta. Il comando (find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@) è più lungo del previsto, ma funziona correttamente. Sono incluse anche sottodirectory, quindi +1 e una risposta accettata :-) - Martin Thoma


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 si desidera escludere i file nascosti:

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

67
2017-08-11 06:28



Grazie per il tuo impegno nell'aiutare un utente di Ubuntu. Si prega di tenere a mente che la ripetizione della risposta accettata in una nuova risposta aggiunge solo alla confusione e ha un'alta probabilità di essere contrassegnata per la rimozione. - hmayag


Inserisci " al .* (altrimenti, la tua shell si espande .* ai file punto nella directory corrente) ed escludi anche i file nascosti nelle sottodirectory:

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

Ciò si tradurrà in file che iniziano con a . non essere aggiunto nel tuo file 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%)

52
2017-08-27 19:17



Non penso che la tua ultima affermazione sia corretta. .* sarebbe espanso dalla shell. - hammar
Penso che sia probabile che sia corretto ma l'ho rimosso (non ne sono sicuro) :) - Rinzwind
questo non ha funzionato. Le directory .svn sono state aggiunte - Martin Thoma
@moose Il modello di esclusione corrisponde al percorso completo, non solo al nome del file base, quindi è necessario escluderlo */.* così come .* (*/ corrisponde a qualsiasi sequenza non vuota di directory). - Gilles
Questo funziona senza cambiare nulla! Migliore risposta. - Whitecat


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 -@

8
2017-11-01 03:19





Esempio per escludere tutte le cartelle che iniziano con. :

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

Comprimi meglio ma più lentamente:

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

8
2018-05-21 16:51





Il metodo corretto sarebbe:

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

5
2018-05-08 16:49



@downvoter: Cosa c'è che non va, sembra che funzioni per me. - jobin
Lo stesso problema con La risposta originale di Rinzwind (ora corretto): non si escludono sottodirectory. E come ha notato Rinzwind, è necessario citare i caratteri jolly, altrimenti la shell li espanderà. - Gilles


Mentre zippare dirs escludendo alcune estensioni di file:

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

4
2017-12-08 17:49





Senza cartelle e file nascosti nella directory:

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