What is the idiomatic way to do the following

  • tar to stdout
  • read this tar output from stdout and extract to some other folder.

My solution is tar --to-stdout .. | tar -C somefolder -xvf -

But may be there is more idiomatic way to do it.


The same -f - option works for tarring as well.

tar -cf - something | tar -C somefolder -xvf -

GNU tar uses stdio by default:

tar -c something | tar -C somefolder -xv

rsync is also popular.

rsync -av something/ somefolder/

Just adding another use-case here. I had a large directory structure on a system nearly out of disk space and wanted to end up with a tar.gz file of the directory structure on another machine with lots of space.

tar -czf - big-dir | ssh user@host 'cat > /path/to/big-dir.tar.gz'

This saves on network overhead and means you don't have to tar on the other side in case you'd wanted to use rsync for the transfer instead.

  • Netcat is perfect for this. (Cat from one host to another host).
    – Hennes
    Jun 25 '15 at 16:40
  • 5
    @Hennes: With its lack of authentication, integrity checking, data encryption, as well as having to manually start it on both sides for each individual transfer (i.e. 2× the work), it sounds a bit less than perfect
    – user1686
    Jul 23 '15 at 7:00
  • Most of the time I gzip it before dumping it over the network. Any integretiy failures are likely to show up as decompression errors (though I never got any when I used it). As to starting two programs: Aye, true.
    – Hennes
    Jul 23 '15 at 7:35
  • 3
    It may be more work, but for sending a large compressed archive over a link during a time-sensitive operation between machines in a secured local network or over a VPN, piping through nc will be significantly faster than SSH (over a 1Gb network, often by a factor of 2). Send over an md5 sum of the archive for integrity checking.
    – Spooler
    Jan 5 '19 at 19:14
  • whats the netcat command?
    – Dave Ankin
    Feb 28 at 1:48

I don't have enough reputation to post a comment about using netcat.

On the receiving end run: netcat -l 5555 > /path/to/dest.tar.gz or netcat -l 5555 | tar -C /path/to/expanded/tar -xz

On the sending side run: tar -C /path/to/source -cz files | netcat <target IP/hostname> 5555

If you are on a fast network, don't bother compressing and decompressing the tar. Used some variant of this over the years for all kinds of recovery.

  • 2
    Robert, thank you for this addition. I think it's fine per se as an answer, so it's even better - I hope you'll pretty soon will have reputation for comments as well though )
    – shabunc
    May 12 at 21:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.