Can anyone tell me if it's possible to pipe | this without having to create a physical file anywhere between A and B.tar.gz?
This is what I'm trying to do:
- File A
- Rename A to B
- Tar B.tar
- gzip -9 B.tar.gz
So for example:
cp A B | tar cvf - B | gzip -9 B.tar.gz 3 3 Answers
The following examples can be used to avoid creating intermediary files:
tar with gzip:
tar cf - A | gzip -9 > B.tar.gz
gzip without tar:
gzip -9c A > B.gz
tar without gzip:
tar cf B.tar A
Renaming (moving) A to B first doesn't make sense to me. If this is intended, then just put a mv A B && before either of the above commands and exchange A with B there.
Example with tar and gzip:
mv A B && tar cf - B | gzip -9 > B.tar.gz
It depends on your version of tar
If you have the version that supports member transforms (--transform or --xform) then you can simply do
tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gzthe | gzip -9 >B.tar.gz can be avoided if your tar supports the -z option
tar -zcvf B.tar.gz --transform=s/A/B/ AIf your version of tar doesn't support --transform then you will have to just copy the file first eg
cp A B && tar -zcvf B.tar.gz BHowever if you are only compressing one file why not skip the tar part all together and just do
cat A | gzip -9 > B.gz 1 If you are using cp to make a copy with a different name/location, then just include the full/final pathname you want when creating your completed .gzip file:
tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz 3