Appunti di vita in ordine sparso

Comprimere in modo automatico più cartelle

Cartelle da comprimereSupponiamo di avere più cartelle all’interno di una directory su una macchina Windows e di volerle archiviare tramite un automatismo (senza dover far clic su ognuna, dire “comprimi”, ecc.). Pensa, per esempio, a dei file di log generati da un programma, salvati nella cartella corrispondente al mese, o al giorno del mese. Pensa di dover pianificare l’esecuzione di questo processo in automatico, su un server. E non vuoi avere un unico file zip compresso, bensì un file compresso per ogni cartella. Bene. Sapresti come fare?

C’è un sistema molto semplice e veloce che ti permette di raggiungere il tuo scopo.

Prima di tutto scarica il programma 7-Zip per la gestione dei file compressi (software open source molto leggero, disponibile in versione x86 a 32-bit e 64-bit) ed installalo. Se vuoi far si che i file di archivio compressi (zip, rar, arj, tar.. ed il formato specifico 7z) vengano aperti in automatico con 7-Zip sul tuo PC, basta che apri il programma, vai sul menu Strumenti, Opzioni e selezioni le estensioni che vuoi associare.

Verifica a che percorso hai installato il software sul tuo PC (verosimilmente potrebbe essere C:\Program Files\7-Zip).

Ora apri un editor di testo (Notepad di Windows va benissimo, anche se mi piace pensare che tu conosci ed usi Notepad++). In un file vuoto scrivi (modificando, eventualmente, il percorso all’interno del quale si trova l’eseguibile 7z.exe):

Cosa significa? Lo script non fa altro che prendere ogni cartella contenuta nel percorso in cui si esegue il file batch e passarla come parametro all’eseguibile di 7-Zip, creando un file compresso che avrà lo stesso nome della cartella.

Salva questo file, facendo attenzione a salvarlo con estensione .bat, anziché .txt (un file txt è un file di testo, mentre un bat è uno script batch, un file eseguibile); chiamalo, per esempio, comprimi.bat e salvalo nel percorso dove hai le varie cartelle che vuoi archiviare. Attenzione: puoi decidere di archiviare le tue cartelle in formato .zip, anziché .7z semplicemente modificando l’estensione.

Cartelle salvate come file compressiNon ti resta che eseguire il file batch comprimi.bat. Si aprirà una finestra di prompt di MS-DOS, dove verrà lanciato lo script; una volta terminata l’esecuzione ti troverai nella tua cartella tanti file compressi, quante sono le sotto-cartelle. In questo esempio, trattandosi di file di testo txt (quindi altamente comprimibili), con i file compressi risparmierai il 97% di spazio su disco-

A te l’onore (e l’onere, ovviamente), ora, di pensare a possibili applicazioni per questo semplice “trucchetto”.. 😉

 

 


Note

  • Su un sistema Linux si consiglia di non utilizzare questo approccio per effettuare dei backup, in quanto 7-Zip non gestisce correttamente i permessi utente sui file. Per un backup su Linux si può utilizzare il comando di compressione tar con gli opportuni parametri.
  • Il metodo della compressione è fortemente raccomandato, oltre che per quanto riguarda i file su PC, anche per le bottiglie di plastica da gettare, nonché tutti i rifiuti, in generale. Applicando questo piccolo e semplice trucco scoprirete come è semplice risparmiare almeno l’80% sui sacchetti per la raccolta differenziata..
Condividi articolo
Share on FacebookTweet about this on TwitterShare on Google+Email this to someone
  • Carlo Vendetti

    Ciao, bellissimo articolo… ma purtroppo non capisco cosa va a comprimere…. cioè mi spiego meglio se io volessi comprimere dei file all’interno di una sola cartella nota come glielo dico?
    Grazie!!

    • Ciao Carlo!
      La procedura descritta in questo articolo comprime delle cartelle (delle quali non si conosce ne il nome, ne la quantità) in un determinato percorso, creando un file compresso per ognuna; per capirci meglio: ho una cartella “base”, che a sua volta contiene le cartelle “a”, “b” e “c” (ognuna di queste cartelle può contenere file e/o altre sottocartelle).. Seguendo le indicazioni di questo articolo siamo in grado di avere come risultato dei file compressi “a.7z”, “b.7z”, “c.7z”.
      Se vuoi comprimere una singola cartella della quale conosci già il nome, la cosa è molto più semplice! Con 7-Zip installato lo puoi fare o da interfaccia grafica di Windows o da prompt dei comandi. Nel primo caso fai clic con il pulsante destro del mouse sulla cartella che vuoi comprimere, vai sulla voce “7-Zip” e poi selezioni “Aggiungi a..” o “Aggiungi all’archivio” per aprire la schermata con tutte le opzioni di compressione. Per lanciare il comando tramite un file batch basta che vai nel percorso dove hai la cartella che vuoi comprimere e lanci:
      “C:Program Files7-Zip7z.exe” a “cartella_compressa.7z” “cartella_da_comprimere”
      …Spero di essere stato chiaro 🙂

      • Waldo

        ciao deste, io ho un’esigenza leggermente diversa: vorrei utilizzare 7-zip per creare una copia compressa del mio backup (se possibile protetta da pwd) su un’altra directory. Esempio:
        la cartella da comprimere è D:backup
        la cartella dove salvare l’archivio dovrebbe essere E:7zbackup
        Cosa deve contenere il mio file batch?

        • Ciao Waldo!
          Per fare una cosa di questo tipo il tuo file batch deve contenere:
          “C:Program Files7-Zip7z.exe” a “E:7zbackupbck.7z” “D:backup” -pPASSWORD

          …Per impostare una password all’archivio è sufficiente mettere alla fine il parametro -P e scrivere di seguito (senza spazi di mezzo) la password che vuoi utilizzare.
          Se al posto di un file in formato .7z vuoi un .zip, basta specificare questa estensione al file di destinazione.
          Semplice, no? 🙂

          Tuttavia per questa tua necessità ti consiglio di valutare un tool di backup/sincronizzazione: avresti un migliore controllo rispetto che una soluzione “base” come questa, direttamente tramite uno script con 7Zip.
          Un tool gratuito in versione Standard (licenza freeware) con il quale mi trovo molto bene è SyncBackFree ( http://www.2brightsparks.com/freeware/freeware-hub.html ).

          Buoni salvataggi! 😉

  • 3olo

    ciao,complimenti per l’articolo,lo uso tantissimo!
    Ho modificato leggermente la batch per comprimere singoli files invece che cartelle. La batch è questa:
    for %%X in (*.stp) do “C:Program Files7-Zip7z.exe” a -tzip “%%X.7z” “%%X”
    Purtroppo però quando vado a selezionare più file compressi con questa batch e a decomprimerli contemporaneamente (selezionandoli tutti,tasto dx, 7z, estrai in ….)me li decomprime ma mi da dei messaggi segnalandomi che i file sono nominati con estensione 7z ma in realtà sono zip. C’è un modo per farli comprimere realmente in formato 7z? Ti ringrazio

    • Grazie!
      Per usare la compressione 7z basta non specificare il parametro -t{type} (ovvero il tuo -tzip): in questo modo 7zip comprime usando l’algoritmo corretto in funzione dell’estensione che specifichi per i file di output (.7z). Oppure modifica -tzip in -t7z
      ciao ciao

      • 3olo

        Ciao! Grande!!! Adesso è perfetta!! Grazie mille ancora, ti saluto