GNU/Linux >> Tutoriels Linux >  >> Linux

Désarchiver le fichier tout en réduisant la taille de l'archive ?

Voici une autre solution. Il ne vous permet pas d'extraire des fichiers individuels d'une archive et de réduire sa taille, mais il vous permet d'extraire tous les fichiers en réduisant la taille de l'archive au fur et à mesure :

#!/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

Enregistrez ceci dans un fichier comme par ex. untar_and_destroy.sh et exécuter en tant que :

untar_and_destroy.sh whatever.tar.gz

Cela donne une partie du .tar.gz fichier en tar, demande à Linux de désallouer cette partie du fichier, puis répète pour la partie suivante. Lorsque vous avez terminé, ls -l dira le .tar.gz les fichiers ont la même taille qu'avant, mais du rapportera sa taille comme 0. C'est parce que le .tar.gz a été transformé en un fichier clairsemé, avec la même longueur qu'auparavant mais comme tous les 0 qui n'ont pas besoin d'être stockés sur le disque.

Ne l'utilisez pas en production, ou n'importe où où la suppression de cette archive serait mauvaise. Cela rend l'archive illisible dès qu'elle démarre, donc si quelque chose ne va pas, par ex. vous manquez d'espace sur le disque dur lors de l'extraction, vous n'aurez pas une seconde chance de l'exécuter.


Bien qu'il ne soit pas pratique d'étendre votre stockage principal, vous pouvez peut-être extraire le contenu du fichier sur un périphérique de stockage externe.

Alternativement, générez une liste de fichiers dans l'archive, puis écrivez un script qui en extrait certains. Déplacez ces fichiers vers le cloud, sélectionnez un autre lot à extraire, faites mousser, rincez, répétez.

Mais, chaque application d'archivage que je connais doit avoir le fichier d'archive d'origine intact pendant qu'elle crée un nouveau fichier d'archive sans ce que vous ne voulez pas, donc le stockage externe va être très, très utile.


Je ne connais aucun outil capable de le faire, et je ne pense pas qu'aucun des formats d'archivage courants ne le prenne en charge.

Une solution possible à votre problème serait de conserver l'archive sur une autre machine et de la diriger vers la machine sur laquelle vous souhaitez la décompresser. Par exemple, vous pouvez exécuter cette commande sur la machine contenant l'archive :

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

L'archive sera diffusée sur le tar processus en cours d'exécution sur le serveur, qui le décompressera sans que l'archive soit jamais présente sur le serveur.


Linux
  1. Créer une archive Tar divisée en blocs d'une taille maximale ?

  2. Différence de calcul de taille de répertoire ?

  3. Comment ajouter/mettre à jour un fichier dans une archive Tar.gz existante ?

  4. Commande Linux tar

  5. Mise à jour d'un seul fichier dans un tar compressé

Comment extraire (décompresser) le fichier Tar Gz

Comment extraire (décompresser) le fichier tar.xz

Comment créer un fichier Tar Gz

Extraire le fichier tar.gz sous Linux

Réduire la taille du fichier PDF sous Linux

tar :lecture courte