Linux: compressione dei file nonostante lo spazio su disco insufficiente


1

Io uso Linux. Ho codificato un programma di screenshot un po 'di tempo fa e ora ho 9 GIG di screenshot, 60000 JPEG, la maggior parte dei quali sembrano abbastanza simili, e ho ancora 300 MB di spazio su disco.

Quali sono alcuni buoni modi per iniziare a comprimere lotti di essi (o tutti) in background dato lo spazio limitato?

Il problema con la compressione della cartella tutto in una volta è che non avrei abbastanza spazio su disco per quello. Sembra che il processo debba essere suddiviso in blocchi.

Quindi forse qualcosa come:

  1. Ottieni un elenco di tutti i file
  2. Aggiungi un blocco dei file (ad esempio 20) a un archivio compresso.
  3. Una volta eseguito e salvato correttamente, elimina il blocco dei file
  4. Elabora il prossimo pezzo.

Quando dici "comprimi" vuoi dire che vuoi eseguirli attraverso un normale motore di compressione (ad esempio gzip, bzip2) (relativamente inefficace) o vuoi ricodificare i file JPEG con una qualità inferiore?
Mike Fitzpatrick

Ho appena fatto un LZMA su una porzione tarata e ho ridotto le dimensioni da 4 MB a 2,3 MB. Le singole immagini sono abbastanza compresse, quindi non voglio più alcuna compressione / ri-codifica con perdite.
Luke Stanley

L'ho capito da solo con uno script Python e 7za: pastebin.com/FZGAmpXB Ora ho già quasi 400 MB di spazio, era 300 MB prima e continua a sfaldarsi. Il mio rappresentante è troppo basso per pubblicare la mia risposta al momento. NOTA: NON controlla la compressione funzionante, ('Tutto è Ok'). Quella parte è DIY ATM, disabilita rm se vuoi.
Luke Stanley

Se "la maggior parte di loro sembra abbastanza simile" perché hai bisogno di tenerli tutti?
glenn jackman

Glenn, se qualcuno ha davvero bisogno di comprimere i file, sono persone con poco spazio sul disco: questo è un problema importante da risolvere. Interrogare la notabilità dei file non è molto produttivo, è il 2011, viviamo nell'era GMail.
Luke Stanley

Risposte:


0

Se i file che si desidera comprimere si trovano nella directory <directory> e l'archivio che si desidera creare è <archive>, potresti:

find <directory> -type f -exec zip -g <archive> {} \; -exec rm {} \;

o con 7za:

find <directory> -type f -exec 7za a <archive> {} \; -exec rm {} \;

Ciò non interrompe l'attività (NECESSARIO SE LOW ON SPACE!) O controllo degli errori.
Luke Stanley

In realtà, interrompe il compito quando i file vengono aggiunti uno alla volta all'archivio (1 ° exec) e rimossi dopo essere stati aggiunti e prima di aggiungere il file successivo (2 ° exec). Per il controllo degli errori, il primo exec restituirà true se zip di 7za restituisce un codice di errore di 0, falso altrimenti. Se viene restituito false, il prossimo exec non dovrebbe essere eseguito. Ovviamente, dovresti testarlo prima di aver fiducia in esso.
jfg956

Forse "rompendo il compito" intendevi creare molti archivi. Tuttavia, ciò rende più difficile trovare il JPG che desideri, in quanto dovrai controllare molti archivi o creare un indice. Hai provato a comprimere il file uno per uno e questo ti fa risparmiare spazio? Forse una soluzione migliore sarebbe la compressione del filesystem ...
jfg956

Penso che il punto mancato qui sia che i file sono abbastanza simili, una certa ridondanza può essere identificata raggruppandone alcuni in un tar e quindi comprimendoli. Sfortunatamente, poiché jpeg è compresso, una piccola differenza all'inizio di un file renderà il resto incomparabile con un altro. Altrimenti, il comando xz -9 * comprimerebbe tutti i file individualmente. PNG potrebbe essere stato migliore come formato per gli screenshot che non contengono nulla di fotografico.
Andy Lee Robinson

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.