it-swarm.com.de

Komprimieren Sie jede Datei in einem Verzeichnis in eine eigene komprimierte Datei

Wie komprimiere ich jede Datei in einem Verzeichnis in einen eigenen Teer, während der Name für jede Datei beibehalten wird?

d.h. file1.out file2.out

->

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

27
DD.

Das Einfügen jeder Datei in eine separate TAR-Datei macht in diesem Szenario keinen Sinn. Sie können gzip verwenden, um sie direkt zu komprimieren:

gzip *

wird darin enden, dass file1.out.gz, file2.out.gz usw.

Sie würden tar nur verwenden, wenn Sie ein komprimiertes Archiv als einzelne Datei benötigen würden.

Wenn Sie für jede Datei ein Teerarchiv benötigen, können Sie es folgendermaßen erstellen:

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

Um auf der Antwort von @ SvenW aufzubauen (die nur für das aktuelle Verzeichnis funktioniert), können Sie auch eine RIESIGE Anzahl von Dateien verwenden oder eine rekursive Verzeichnisstruktur verwenden

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

und wenn Sie die Ausgabe in ein anderes Verzeichnis stellen müssen (in diesem Beispiel ../target) und möchten die Originale nicht entfernen, können Sie etwas tun wie:

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

Probier diese:

#!/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