1

Say I have an http or tcp server running, which serves tarballs (.tgz files).

Is there some way I can receive files individually so I can do something like this:

nc localhost 5000 | how can I read multiple files here and save each to disk?

to explain further, when I connect to the server, I'd like it to respond with a series of .tgz files. My question is, if it's a tcp server, how can I write each file so that it comes in separately.

The only thing I would know how to do would be to stream the data to a single file, but I don't know how to write out multiple files.

This is potentially an answer: https://stackoverflow.com/a/44894223/1223975

But I don't understand how to write each file out individually.

6
  • 1
    http multipart might be the way, if pure tcp makes this hard. one problem is that the client does not know in advance how many files it will receive, the server dictates that. May 14, 2018 at 6:17
  • Do you control the server?
    – muru
    May 14, 2018 at 6:59
  • yeah I do, I control both server and client, it's all locally running - I think this answer might work: stackoverflow.com/a/44894223/1223975 May 14, 2018 at 7:07
  • but I guess after tar -x runs, I don't know how to save each file to disk, or how that works May 14, 2018 at 7:07
  • Yes, that should work. That's what I usually use (either that or a variation of ssh tar c ... | tar x ... if security is needed). tar will unarchive each file in the incoming archive to separate files.
    – muru
    May 14, 2018 at 7:08

1 Answer 1

3

On the server, do:

tar c file1 file2 dir1 file3 ... | nc -l 5000

Then, on the client, do:

nc server 5000 | tar x

Or, slower, but more secure:

ssh server tar c file1 file2 dir1 file3 ... | tar x

For example:

$ ssh localhost 'cd /etc; tar c passwd nsswitch.conf' | (d=$(mktemp -d); tar xv -C "$d"; ls -l "$d"; rm -r "$d")
passwd
nsswitch.conf
total 8
-rw-r--r-- 1 muru muru  529 Feb 16  2017 nsswitch.conf
-rw-r--r-- 1 muru muru 2631 Apr 24 18:18 passwd
3

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .