Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

On machine A I have the folder

/home/a/

On machine B I have the folder

/home/b/

I wish transfer all files, directories and sub-directories of /home/a in /home/b with sftp On machine A I tried the commands:

sftp fibon82@machineB.com
put /home/a/* /home/b/

but it doesn't work, i get the error message: "skipping non-regular file /home/a/a1"... [a1 is a sub-directory of a]
How could I modify the put instruction?

Thanks! :)

EDIT:

I solved using scp:

scp -r /home/a/ fibon82@machineB.com:/home/b/
share|improve this question

migrated from stackoverflow.com Feb 8 '12 at 13:57

This question came from our site for professional and enthusiast programmers.

2  
put -r would have worked too. – WakiMiko Feb 8 '12 at 16:07
    
Ok but how could I know that for "put command" the option -r is available? If I look here only the flag -P is described... The same in the manual Thanks! :) – fibon82 Feb 9 '12 at 0:37
    
You should post that as an answer instead. – N.N. Mar 7 '12 at 20:20
    
Yes. Instead of EDITing your question with the answer, you should answer your own question and accept it. – user41608 Jun 5 '14 at 8:32
    
@fibon82 For up-to-date manual to OpenSSH sftp, refer to the OpenSSH project. – Martin Prikryl Dec 22 '14 at 19:56
up vote 16 down vote accepted

Although not strictly equivalent to sftp, rsync is a very powerful alternative for scp and sftp, especially when updating the copies from machine A to machine B, as it doesn't copy the files that haven't been altered; it's also able to remove files from machine B that have been deleted from machine A (only when it's told to of course).

In your case, the syntax would be

rsync -zrp /home/a/ user@remote.host.com:/home/b/

The -r option is for recursively copying files, -z enables compression during the transfer, and -p preserves the file permissions (file creation, edit, etc.) when copying, which is something that scp doesn't do AFAIK. Many more options are possible; as usual, read the man pages.

share|improve this answer
    
Ah thank you! :) A new thing that I learned! – fibon82 Feb 9 '12 at 0:08
    
@fibon82: You're welcome :) – Karolos Feb 9 '12 at 6:47
1  
i love you, i synced 400MB of data in 1 minute by just using your code. I would add you should also use --progress otherwise you'll be staring at nothing without knowing what's happening (and at what speed :) ) – Sandro Antonucci Dec 18 '12 at 22:18
1  
Sadly rsync does not speak sftp-Protocol. So if you set up an sftp-chroot using ssh's build in internal-sftp then rsync fails. – Tino May 3 at 11:54

scp (secure copy) is the Linux de facto for transferring files over a secure tunnel. In your case you would want to use the recursive switch, e.g.:

scp -r /home/a/ user@remote.host.com:/home/b/
share|improve this answer
4  
sftp and scp are actually different protocols, both based on ssh. – paradroid Feb 8 '12 at 16:20
1  
Yes, if the server only allows sftp protocol, this answer does not work. – ruffp Dec 6 '13 at 14:05

In sftp this command recursively uploads content of the current directory to the remote current directory:

 put -r .

See man sftp.

share|improve this answer
    
The -r switch is supported since OpenSSH 5.4 only. – Martin Prikryl Dec 22 '14 at 19:52
    
Note that the -r switch is client side only (part of sftp command). So the server (here: receiving) side does not need OpenSSH 5.4, only the client needs to support it. – Tino May 3 at 11:57

Try using

put -r /home/a/ /home/b/

for more info check out: this

share|improve this answer
1  
The -r switch is supported since OpenSSH 5.4 only. – Martin Prikryl Dec 22 '14 at 19:52
    
Note that the -r switch is client side only (part of sftp command). So the server (here: receiving) side does not need OpenSSH 5.4, only the client needs to support it. And: This should be the accepted answer, as getting (the possibly unsupported) rsync as answer to a question tagged sftp is a bit confusing. – Tino May 3 at 12:00

In my case rsync wasn't possible so I used:

mput -rp /home/a/ /home/b/
share|improve this answer
    
There's no mput command in OpenSSH sftp. Maybe you refer to psftp? – Martin Prikryl Dec 22 '14 at 19:52

You must log in to answer this question.

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