netcatを使用してサーバーに接続し、1つの要求/接続で*複数の*ファイルを受信します。

netcatを使用してサーバーに接続し、1つの要求/接続で*複数の*ファイルを受信します。

tarball(.tgzファイル)を提供する実行中のhttpまたはtcpサーバーがあるとします。

次のようにファイルを個別に受け取る方法はありますか?

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

詳しくは、サーバーに接続するときに一連の.tgzファイルで応答したいと思います。私の質問は、TCPサーバーの場合に各ファイルを個別に作成するにはどうすればよいですか?

私が知っている唯一の方法は、データを単一のファイルにストリーミングすることですが、複数のファイルを作成する方法はわかりません。

これは答えかもしれません:https://stackoverflow.com/a/44894223/1223975

しかし、各ファイルを個別に作成する方法を理解していません。

答え1

サーバーで、次の操作を行います。

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

その後、クライアントは次のことを行います。

nc server 5000 | tar x

または遅いが、より安全です。

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

たとえば、

$ 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

関連情報