Come comprimere cartelle specifiche con la riga di comando
-
05-07-2019 - |
Domanda
Potreste dirmi come comprimere i file specificati nello stesso file Zip. Lasciami dire come sono riempite le mie cartelle:
- Uno scheduler ha i backup dei miei database e li salva quotidianamente in un file. Crea 4 backup del database ogni giorno, il che significa che ci saranno altri 4 file al giorno. Quindi ho bisogno di comprimere i backup appena creati nello stesso file zip (ovviamente differisce dal file zip del giorno precedente, il file zip verrà creato per quel giorno per i file di backup appena creati) e devo farlo automaticamente. Bene, so come renderlo automatico. Posso utilizzare l'utilità di pianificazione di Windows per automatizzare le cose.
Grazie.
Soluzione
Puoi farlo con DotNetZip - originariamente prodotto come una libreria per l'uso da parte dei programmatori ma l'esempio le app costruite e spedite con la libreria sono diventate molto utili a pieno titolo.
Uno dei " samples " si chiama zipit.exe - uno strumento console. Specificare un file zip inesistente per crearne uno nuovo o specificare un file zip esistente per aggiornarlo.
zipit.exe ZipArchive.zip c:\data\folder1
È possibile specificare uno o più nomi di file, directory o un'espressione logica che descriva quali file includere. Per le espressioni:
-
name = *.jpg
qualsiasi file .jpg. -
mtime > 07/01/2009
qualsiasi file con ora dell'ultima modifica dopo la mezzanotte del 1 ° luglio 2009. C'è anche ctime e atime per l'ora di creazione e l'ora di accesso. -
ctime > 07/01/2009:07:53:00
qualsiasi file con ora di creazione dopo le 7:53 del 1 ° luglio 2009. -
size > 320mb
qualsiasi file con dimensioni superiori a 320mb. Puoi anche usare kb o gb . O omettere i caratteri per una dimensione in byte. E puoi usare & Lt; o = come operazioni. -
attr != H
qualsiasi file che non ha impostato l'attributo nascosto. Altri attributi includono S = sistema, R = sola lettura, A = archivio. Ovviamente puoi provare anche che l'attributo è ON (usando = invece di! =). -
attr != H and size > 320mb
includere i file che soddisfano entrambe le condizioni. Puoi anche usare OR come congiunzione. Usa le parentesi per raggruppare espressioni complesse. -
name = *.jpg or name = *.gif
includere i file che soddisfano l'una o l'altra condizione. -
(name = *.jpg) or (name = *.gif)
come sopra. -
(mtime >= 07/01/2009) and (mtime < 07/02/2009)
qualsiasi file modificato il 1 luglio. Da mezzanotte a mezzanotte. -
(name = *.jpg) AND (mtime >= 07/01/2009) and (mtime < 07/02/2009)
qualsiasi file .jpg modificato il 1 luglio. -
(name = *.jpg) and (size >= 100kb) and (mtime >= 07/01/2009) and (mtime < 07/02/2009)
qualsiasi file .jpg, di dimensioni pari o superiori a 100kb, modificato il 1 ° luglio.
Con altre opzioni sullo strumento zipit.exe, puoi anche:
- specifica se vuoi attraversare punti di analisi (come collegamenti simbolici o giunzioni, ad esempio " My Music ").
- elenca le directory o meno (il valore predefinito NON è)
- crittografa lo zip con AES o con " normale " crittografia zip
- specifica una dimensione del segmento per produrre un file zip con spanning o segmentato.
- produce un archivio autoestraente
Esempi:
zipit.exe Archive.zip -D c:\project1 -r+ "(name = *.xlsx) and (mtime >= 07/01/2009) and (mtime < 07/31/2009)"
- Produci un file, Archive.zip, che contiene tutti i file .xslx nella gerarchia di directory c: \ project1, che sono stati modificati a luglio.
zipit.exe Unpack.exe -sfx w -D project2 -r+ "(name = *.pdf) and (size > 100kb)"
- Produce un exe GUI autoestraente, denominato Unpack.exe, che contiene tutti i file .pdf nella gerarchia di directory project2, che hanno dimensioni maggiori di 100k.
DotNetZip è gratuito.
Tutte queste funzionalità sono disponibili anche nell'interfaccia .NET della libreria. E c'è anche uno strumento GUI.
Altri suggerimenti
Uso il programma open source 7Zip con una riga di comando come:
"C:\Program Files\7-Zip\7z.exe" a My.zip MyFileOrFolder
Se si utilizza una partizione NTFS, potrebbe anche risolvere il problema in modo che Windows comprima automaticamente la cartella in cui si trovano i file di backup (fare clic con il pulsante destro del mouse sulla cartella, selezionare Proprietà, Avanzate e fare clic su Comprimi contenuto per proteggere i dati) .
Ho abbandonato WinZip a favore di 7-Zip perché è veloce, gratuito, efficiente e disponibile per Windows e Linux.
Se sei un fan di WinZip, dai un'occhiata al componente aggiuntivo di supporto della riga di comando di WinZip: http : //winzip.com/prodpagecl.htm
Puoi archiviare tutti i file o le directory consentiti dalla tua riga di comando di Windows:
wzzip archive.zip dir1 dir2 dir3 ...
Puoi scaricare GNU zip per Windows all'indirizzo http://gnuwin32.sourceforge.net/packages /zip.htm . Se si desidera ottenere l'intero percorso della riga di comando UNIX, zip è disponibile con http://www.cygwin.com/ .
La pagina man fornisce questo esempio che sembra risolvere il tuo problema, ci sono anche molte altre opzioni da riga di comando:
Ad esempio, se foo.zip esiste e contiene foo / file1 e pippo / file2 e la directory pippo contiene i file pippo / file1 e pippo / file3, quindi:
zip -r foo.zip foo
o più concisamente
zip -r foo foo
sostituirà foo / file1 in foo.zip e aggiungerà foo / file3 a foo.zip. Dopodichè, foo.zip contiene foo / file1, foo / file2 e foo / file3, con foo / file2 invariato da prima.
Cerca in un vecchio programma chiamato PKZIP. Credo che puoi farlo anche con WinZip e 7Zip.