GNU/Linux >> Linux Esercitazione >  >> Linux

Annullare l'archiviazione riducendo le dimensioni dell'archivio?

Ecco un'altra soluzione. Non ti consente di estrarre singoli file da un archivio e ridurne le dimensioni, ma ti consente di estrarre tutti i file riducendo le dimensioni dell'archivio man mano che procedi:

#!/bin/sh

# $1, the first paramter, is the .tar.gz file to unarchive

(
    size=$(wc -c $1)
    offset=0
    bs=4096
    while [[ $size > $offset ]]; do
        dd if=$1 bs=$bs count=1 skip=$offset status=none
        fallocate -p -o $offset -l $bs $1
        offset=$(( $offset + $bs ))
    done
) | tar xz

Salvalo in un file come ad es. untar_and_destroy.sh ed eseguire come:

untar_and_destroy.sh whatever.tar.gz

Quello che fa è dare parte del .tar.gz file in tar, chiede a Linux di deallocare quella parte del file, quindi ripete per la parte successiva. Quando hai finito, ls -l dirà il .tar.gz files ha la stessa dimensione di prima, ma du riporterà la sua dimensione come 0. Questo perché .tar.gz è stato trasformato in un file sparse, con la stessa lunghezza di prima ma con tutti gli 0 che non devono essere archiviati su disco.

Non usarlo in produzione o ovunque dove l'eliminazione di quell'archivio sarebbe dannoso. Ciò rende l'archivio illeggibile non appena viene avviato, quindi se qualcosa va storto, ad es. esaurisci lo spazio su disco rigido durante l'estrazione, non avrai una seconda possibilità per eseguirlo.


Anche se potrebbe non essere pratico espandere la memoria principale, forse potresti estrarre il contenuto del file su un dispositivo di archiviazione esterno.

In alternativa, genera un elenco di file nell'archivio, quindi scrivi uno script che ne estragga alcuni. Sposta quei file nel cloud, seleziona un altro batch da estrarre, insaponare, risciacquare, ripetere.

Ma ogni app di archiviazione che conosco deve avere il file di archivio originale intatto mentre crea un nuovo file di archivio senza ciò che non vuoi, quindi l'archiviazione esterna sarà molto, molto utile.


Non conosco strumenti in grado di farlo e non credo che nessuno dei formati di archiviazione comuni lo supporti.

Una possibile soluzione al tuo problema sarebbe mantenere l'archivio su una macchina diversa e inviarlo alla macchina su cui vuoi decomprimerlo. Ad esempio, puoi eseguire questo comando sulla macchina con l'archivio:

cat archive.tar.gz | ssh YOUR_SERVER tar xfz -

L'archivio verrà trasmesso al tar processo in esecuzione sul server, che lo decomprimerà senza che sia necessario che l'archivio sia mai presente sul server.


Linux
  1. Creare un archivio di catrame diviso in blocchi di dimensioni massime?

  2. Come aggiungere/aggiornare un file a un archivio Tar.gz esistente?

  3. Comando tar di Linux

  4. Errore tar:EOF imprevisto nell'archivio

  5. Aggiornamento di un singolo file in un tar compresso

Come estrarre (decomprimere) il file Tar Gz

Come estrarre (decomprimere) il file tar.xz

Come creare file Tar Gz

Estrai il file tar.gz in Linux

Riduci le dimensioni del file PDF in Linux

Aggiunta di file ai file tbz