Comment compresser des fichiers sur place?

20

J'ai une machine avec 90% d'utilisation du disque dur. Je veux compresser ses 500+ fichiers journaux dans un nouveau fichier plus petit. Cependant, le disque dur est trop petit pour conserver à la fois les fichiers d'origine et les fichiers compressés.

Donc, ce dont j'ai besoin, c'est de compresser tous les fichiers journaux dans un seul nouveau fichier un par un, en supprimant chaque original une fois compressé.

Comment puis-je faire cela sous Linux?

Zen
la source
Duplicate: superuser.com/questions/378230
Hermann

Réponses:

18

gzipou bzip2compressera le fichier et supprimera automatiquement le fichier non compressé (c'est leur comportement par défaut).

Cependant, gardez à l'esprit que pendant le processus de compression, les deux fichiers existent.

Si vous souhaitez compresser les fichiers journaux (par exemple: les fichiers contenant du texte), vous pouvez préférer bzip2, car il a un meilleur rapport pour les fichiers texte.

bzip2 -9 myfile       # will produce myfile.bz2

Comparaison et exemples:

$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile

$ bzip2 -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2

$ bunzip2 myfile.bz2

$ gzip -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz

MISE À JOUR comme @Jjoao me l'a dit dans un commentaire, fait intéressant, xzsemble avoir un meilleur ratio sur les fichiers simples avec ses options par défaut:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz

Pour plus d'informations, voici une référence intéressante pour différents outils: http://binfalse.de/2011/04/04/comparison-of-compression/

Pour l'exemple ci-dessus, j'utilise -9pour un meilleur taux de compression, mais si le temps nécessaire pour compresser les données est plus important que le taux, vous feriez mieux de ne pas l'utiliser (utilisez une option inférieure, c'est -1-à- dire ou quelque chose entre les deux).

apaul
la source
2
+1; Juste curieux: pourriez-vous ajouter un xz myfile?
JJoao
2
@JJoao merci! C'est intéressant, je n'ai pas l'habitude de l'utiliser xz, mais je vais y réfléchir maintenant. Voir la mise à jour de mon post.
2015
3
S'il vous plaît, ne le faites pas xz -9. Il augmente considérablement la mémoire requise pour la compression / décompression, sans améliorer considérablement le taux de compression. La page de manuel dit même (en soulignant la leur) "Plus précisément, ce n'est pas une bonne idée d'utiliser aveuglément -9 pour tout ce qui est souvent le cas avec gzip (1) et bzip2 (1)". La valeur par défaut xz -6est suffisamment bonne, et même xz -0/ xz -1généralement mieux que gzip -9.
user49740
@ user49740 vous avez raison. Je l'utilise rarement -9, mais je l'ai utilisé ici car je voulais faire une sorte de référence pour le taux de compression "à la même échelle". Mais encore une fois, vous avez tout à fait raison: c'est une mauvaise idée d'utiliser aveuglément -9.
2015
15

J'ai trouvé une solution de goudron par moi-même.
Il supprime un fichier unique après l'avoir compressé dans le fichier cible.
Cependant, la vitesse de compression n'est pas assez rapide. La commande ressemble à:

tar -zcvf my_log.tar.gz *.log --remove-files
Zen
la source
1
Bon vieux goudron. +1
Aaron Hall
1

En complément de @apaul, je souligne que la compression individuelle des fichiers

 bzip2 *.log.*

(remplacez bzip2 par gzip, xz, ou quel que soit votre fichier zip préféré) peut être important:

De cette façon, vous pouvez toujours voir ( bzcat file.bz2), rechercher ( bzgrep file.bz2), éditer ( vi file.bz2) le fichier compressé et supprimer les plus anciens si nécessaire.

JJoao
la source
1

J'essayais de le faire sur la version BSD de tar. Dans ce cas, l'option --remove-files n'est pas disponible. Ce que j'ai fini par faire (et travailler) était:

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;
pgilmon
la source
Par ailleurs, la version BSD est ce que vous obtenez par défaut si vous utilisez MacOS
pgilmon