I would like to pipe an scp pull operation(sample without tar below) through tar, so that only one tar file is written for about 10 directories:

user@localhost:/home/user> scp -r remoteuser@remotehost:dir_to_transfer ./

I have directories on a remote machine that have about 10,000 small(~28k)files per directory to transfer. Due to file quotas, I don't have much free space to run the tar command on the remote host(remotehost). Due to firewall rules, I can only initiate the transfer from my local machine(localhost).

The sheer number of files makes the transfer very long.

I have found examples of how to do this when "pushing" the data, but would like to know how to do this when "pulling" the data.

Local machine info:

  • OS:OpenSuSe 13.2(x86_64)

  • bash 4.2.53(1)

  • OpenSSH_6.6.1p1, OpenSSL 1.0.1k-fips 8 Jan 2015

Remote machine info:

  • OS: CentOS release 5.11 (Final)
  • bash 3.2.25(1)
  • OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

try from user@localhost

 > ssh -l remoteuser remotehost "tar cf - dir_to_transfert" > remote.tar


  • > is the prompt
  • ssh -l remoteuser remotehost connect you to remote host
  • "tar cf - dir_to_transfert" perform remote tarin to standard output
  • > remote.tar redirect ssh's output to localfile name remote.tar

this will work if you are allowed tar on remote host.

  • You have an extraneous ) character – Barmar Feb 15 '15 at 6:04
  • @Barmar thank, my first intend was ( ssh ... ) > foo , but since local shell get > first. – Archemar Feb 15 '15 at 9:32
  • Yeah,I had a feeling it was an edit like that – Barmar Feb 15 '15 at 9:32

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.