Réponses:
Placer chaque fichier dans un fichier tar distinct n'a aucun sens dans ce scénario. Vous pouvez utiliser gzippour les compresser directement:
gzip *
entraînera file1.out.gz, file2.out.gzetc.
Vous n'utiliseriez tarque 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
              find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
                    find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
                    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 voulez 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
              find . -type f -exec gzip {} \;sera suffisant. Le deuxième code échouera avec les noms de fichiers contenant des espaces et similaires.
                    {}par force d'habitude). Cependant, d'autres ont déjà posté ces réponses à votre question.
                    find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;
                    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