[ZIP] Créer un zip qui se contient lui même à l’infini ou presque !

clone army

 

Salut à tous,

 

Je reviens tout doucement de vacance, et j'avoue ça fait du bien !!!
La Bretagne c'est un peu mon petit coin de paradis, le soleil, l'eau fraîche et transparente de la côte, le relief mi-montagneux, mi-vallonné, les traditionnelles moules frites, les huîtres, les crabes.

... je m'égare ...

 

Mais que voulez-vous, la dure réalité de la reprise ...

 

Alors, je vous ai concocté un petit script qui crée une archive, sur autant de niveau que vous lui en donnerez : 10, 20, 100, 1 000, 1 000 000 000, ... 
L'archive finale ne contient rien, c'est une archive vide ...

Alors ...

Comment créé-t-on une archive vide, et quel poids ça fait ?

En moyenne selon les différents logiciels le poids varie.
Il oscille légèrement entre 20 et 22 octets

Sur Windows :

Un simple clic droit dans un dossier, "Nouveau", "Archive"

Capture2

Sur linux :

Un peu plus compliqué, mais tant que ça.
Il faut d'abord créer l'archive avec un fichier, puis supprimer ensuite le fichier de l'archive.

ziparchive_vide.zip    unFichier
zip -d archive_vide.zip    unFichier

 

Ok, jusque là on est plutôt bon !!!

 

Pourquoi créer une archive avec (x) récursion :

Plus le niveau de récursion sera haut, plus il sera difficile pour une personne physique ou un logiciel d'en contrôler la sécurité

 

Capture2

 

Lorsque je dis compliqué, je ne dit pas impossible.
Seulement ça demandera à votre machine de travailler, surtout si elle doit en contrôler plusieurs.

 

Capture

On peut également, très facilement imaginer un usage type "Zip Bomb"

Ou bien, ça peut servir de planque pour vos données ;)

Place au script de récursion (Linux) :

 

Vous allez devoir créer un script bash contenant ceci :

 

#!/bin/bash

# Partie configurable

level=50
filename="test.zip"
tmpfile="tmp$filename"

########## MAIN ###############
i=0
#Creation d'une archive vide
touch $tmpfile
zip $filename $tmpfile
zip -d $filename $tmpfile
rm $tmpfile -f
#Récursion de l'archive
while [ $i -lt $level ]; do
# On copie l'archive et son contenu dans un fichier temporaire
cp $filename $tmpfile
# On vide l'archive de son contenu
zip -d $filename $filename
# On inclu le fichier temporaire dans l'archive
zip $filename $tmpfile
# On renomme le fichier temporaire pour lui donner le même nom que l'archive
echo -e "@ $tmpfile\n@=$filename" | zipnote -w $filename
zip -d $filename $tmpfile > /dev/null
# On supprime le fichier temporaire
rm $tmpfile -f
let i=$i+1
done

 

Je pense avoir suffisamment commenté le code pour que vous puissiez comprendre un peu comment tout ça se goupille.

Vous avez la possibilité de donner n'importe quel nom à votre archive, ainsi que de définir le nombre de niveau(x) de récursion.

 

Petit exemple généré par mon script : http://api.ikarton.fr/divers/infinity_test.zip

Laisser une réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.