Problem
Oft möchte man ein Verzeichnis von einem Rechner auf einen anderen kopieren. Wenn es schon Teile des Verzeichnisses lokal gibt verwendet man dazu am besten rsync. Ansonsten macht man es normalerweise so:user@local:~$ ssh host user@host:~$ tar cfz junk.tar.gz bigdir user@host:~$ logout user@local:~$ scp host:junk.tar.gz . user@local:~$ tar xvfz junk.tar.gzDas ist aber aufwendig...
Lösung
Verwendung von Netcat und einer Pipe übers Netzwerkuser@host:~$ tar cvf - bigdir | nc -l -p 10999 user@local:~$ nc host 10999 | tar xvf -
Netcat liest Hostseitig von stdin und wartet auf Verbindungen (-l, listen) auf Port (-p) 10999. Der Clientseitige Netcat verbindet sich an diesen Port und empfängt alle Daten vom Host und schreibt diese dann auf stdout.
Netcat hält die Verbindung üblicherweis offen, auch wenn sich der tar beendet. Um netcat automaticsch zu beenden, wenn eine bestimmte Zeit keine Daten über das Netz kommen, verwendet man die Option -q <sekunden>.