Antworten:
In diesem Szenario macht es keinen Sinn, jede Datei in einer separaten TAR-Datei abzulegen. Sie können gzip
sie direkt komprimieren:
gzip *
wird dazu führen file1.out.gz
, file2.out.gz
etc.
Sie würden es tar
nur verwenden, wenn Sie ein komprimiertes Archiv als einzelne Datei benötigen würden.
Wenn Sie für jede Datei ein tar-Archiv benötigen, können Sie es folgendermaßen erstellen:
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 \;
Aufbauend auf der Antwort von @ SvenW (die nur für das aktuelle Verzeichnis funktioniert) können Sie auch eine rekursive Verzeichnisstruktur verwenden, wenn Sie über eine RIESIGE Anzahl von Dateien verfügen oder dies tun möchten
find . -type f -exec gzip \{\} \;
Wenn Sie die Ausgabe in ein anderes Verzeichnis verschieben müssen (in diesem Beispiel ../target
) und die Originale nicht entfernen möchten, können Sie Folgendes tun:
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 {} \;
wird ausreichen. Der zweite Code schlägt mit Dateinamen fehl, die Leerzeichen und dergleichen enthalten.
{}
aus Gewohnheit). Andere haben diese jedoch bereits als Antworten auf Ihre Frage veröffentlicht.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;