web-dev-qa-db-fra.com

Compressez chaque fichier d'un répertoire dans son propre fichier compressé

Comment compresser chaque fichier d'un répertoire dans son propre tar tout en préservant le nom de chaque fichier?

c'est-à-dire file1.out file2.out

->

file1.out.tar.gz file2.out.tar.gz

27
DD.

Placer chaque fichier dans un fichier tar distinct n'a aucun sens dans ce scénario. Vous pouvez utiliser gzip pour les compresser directement:

gzip *

aura pour résultat file1.out.gz, file2.out.gz etc.

Vous utiliseriez tar uniquement si vous aviez besoin d'une archive compressée en tant que fichier unique.

Si vous avez besoin d'une archive tar pour chaque fichier, vous pouvez la créer comme suit:

for i in *; do tar -czf $i.tar.gz $i; done
66
Sven

Pour s'appuyer sur la réponse de @ SvenW (qui ne fonctionnera que sur le répertoire actuel), si vous avez un nombre ÉNORME de fichiers ou si vous souhaitez le faire sur une structure de répertoire récursive, vous pouvez également utiliser

find . -type f -exec gzip \{\} \;

et si vous devez placer la sortie dans un répertoire différent (dans cet exemple, ../target) et que vous ne souhaitez pas supprimer les originaux, vous pouvez faire quelque chose comme:

find . -type f -print | while read fname ; do
    mkdir -p "../target/`dirname \"$fname\"`"
    gzip -c "$fname" > "../target/$fname.gz"
done
9
fluffy

Essaye celui-là:

#!/bin/bash
for fich in *; do
    if [ "$fich" != "*" ] ; then
        gzip -9 -c $fich > $fich.tar.gz
        \mv $fich.tar.gz $fich
    fi
done
0
Mats