Wie komprimiere ich jede Datei in einem Verzeichnis in ein eigenes tar, wobei der Name für jede Datei erhalten bleibt?
dh file1.out file2.out
->
file1.out.tar.gz file2.out.tar.gz
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
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:quelle
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 {} \;
Probier diese:
quelle