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
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
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
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