Supposons que j'ai 10 000 fichiers XML. Supposons maintenant que je veuille les envoyer à un ami. Avant de les envoyer, je voudrais les compresser.
Méthode 1: ne les compressez pas
Résultats:
Resulting Size: 62 MB
Percent of initial size: 100%
Méthode 2: Zip chaque fichier et lui envoyer 10 000 fichiers xml
Commander:
for x in $(ls -1) ; do echo $x ; zip "$x.zip" $x ; done
Résultats:
Resulting Size: 13 MB
Percent of initial size: 20%
Méthode 3: créer un zip unique contenant 10 000 fichiers XML
Commander:
zip all.zip $(ls -1)
Résultats:
Resulting Size: 12 MB
Percent of initial size: 19%
Méthode 4: Concaténez les fichiers en un seul fichier et décompressez-le
Commander:
cat *.xml > oneFile.txt ; zip oneFile.zip oneFile.txt
Résultats:
Resulting Size: 2 MB
Percent of initial size: 3%
Des questions:
- Pourquoi ai-je des résultats tellement meilleurs alors que je ne fais que compresser un fichier?
- Je m'attendais à obtenir des résultats nettement meilleurs en utilisant la méthode 3 que la méthode 2, mais ce n'est pas le cas. Pourquoi?
- Ce comportement est-il spécifique à
zip
? Si j'essayais d'utiliser,gzip
obtiendrais-je des résultats différents?
Information additionnelle:
$ zip --version
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
Currently maintained by E. Gordon. Please send bug reports to
the authors using the web page at www.info-zip.org; see README for details.
Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip,
as of above date; see http://www.info-zip.org/ for other sites.
Compiled with gcc 4.4.4 20100525 (Red Hat 4.4.4-5) for Unix (Linux ELF) on Nov 11 2010.
Zip special compilation options:
USE_EF_UT_TIME (store Universal Time)
SYMLINK_SUPPORT (symbolic links supported)
LARGE_FILE_SUPPORT (can read and write large files on file system)
ZIP64_SUPPORT (use Zip64 to store large files in archives)
UNICODE_SUPPORT (store and read UTF-8 Unicode paths)
STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)
UIDGID_NOT_16BIT (old Unix 16-bit UID/GID extra field not used)
[encryption, version 2.91 of 05 Jan 2007] (modified for Zip 3)
Edit: métadonnées
Une réponse suggère que la différence réside dans les métadonnées système stockées dans le zip. Je ne pense pas que cela puisse être le cas. Pour tester, j'ai fait ce qui suit:
for x in $(seq 10000) ; do touch $x ; done
zip allZip $(ls -1)
Le zip résultant est de 1,4 Mo. Cela signifie qu’il reste environ 10 Mo d’espace inexpliqué.
$(ls -1)
, il suffit d' utiliser *
: for x in *
; zip all.zip *
.tar.gz
opposition au simple fait de compresser tout le répertoire.