Howto-Pipe: cp | teer | gzip ohne zwischen Dateien zu erstellen?

31

Kann mir jemand sagen, ob es möglich ist, | dies, ohne eine physische Datei irgendwo zwischen A und B.tar.gz erstellen zu müssen?

Das versuche ich zu tun:

  1. Datei A
  2. Benennen Sie A in B um
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Also zum Beispiel:

cp A B | tar cvf - B | gzip -9 B.tar.gz

quelle
warum möchten Sie Rohr gefallen cp A B?
Dor
1
umbenennen ist mv.
Karoly Horvath
3
Bitte beschreiben Sie kopieren möchten Aan Berster Stelle .
Speakr

Antworten:

42

Die folgenden Beispiele können verwendet werden, um das Erstellen von Zwischendateien zu vermeiden:

teer mit gzip:

tar cf - A | gzip -9 > B.tar.gz

gzip ohne teer:

gzip -9c A > B.gz

teer ohne gzip:

tar cf B.tar A

Das Umbenennen (Verschieben) Aauf Bzuerst ergibt für mich keinen Sinn. Wenn dies beabsichtigt ist, dann stelle einfach einen der mv A B &&beiden oben genannten Befehle vor und tausche Amit Bdort.

Beispiel mit tar und gzip:

mv A B && tar cf - B | gzip -9 > B.tar.gz

speakr
quelle
1
Dies ist richtig und sollte als solche gekennzeichnet werden. Sie müssen ein "-" nach "tar" für die Pipe-Option einfügen, andernfalls erhalten Sie "tar: Feige Weigerung, ein leeres Archiv zu erstellen".
Adambean
6

Es hängt von Ihrer Version von tar ab

Wenn Sie die Version haben, die Member-Transformationen unterstützt (--transform oder --xform), können Sie dies einfach tun

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz

die | gzip -9> B.tar.gz kann vermieden werden, wenn Ihr tar die Option -z unterstützt

tar -zcvf B.tar.gz --transform=s/A/B/ A

Wenn Ihre Version von tar --transform nicht unterstützt, müssen Sie zuerst die Datei kopieren, z

 cp A B && tar -zcvf B.tar.gz B

Wenn Sie jedoch nur eine Datei komprimieren, überspringen Sie einfach den Teer-Teil

cat A | gzip -9 > B.gz
Bob Vale
quelle
Ich habe cp verwendet, wie Sie es in Ihrem Beispiel getan haben, aber der Name lautet mv
0

Wenn Sie cpeine Kopie mit einem anderen Namen / Speicherort erstellen, geben Sie beim Erstellen der vollständigen .gzip-Datei einfach den vollständigen / endgültigen Pfadnamen an:

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz
Gast
quelle
Dies funktioniert nicht, erzeugt "tar: Feige Weigerung, ein leeres Archiv zu erstellen".
Adambean
@Adambean Vielleicht möchten Sie verwenden tar -czf - some-folder > some-archive.tar.gz?
Tsauerwein
1
@tsauerwein, ja, siehe meine Antwort auf die folgende Antwort von vor 14 Monaten ...
Adambean