M HYPE SPLASH
// updates

sftp: upload all files, directories and sub-directories contained in a folder

By Emma Terry

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
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/ :/home/b/
5

6 Answers

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/ :/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.

4

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

 put -r .

See man sftp.

2

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/ :/home/b/
2

Try using

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

for more info check out: this

3

Actually, put -r should work. But the destintion folder needs to be present on your remote host:

sftp> put -r sourcefolder Uploading sourcefolder/ to /user/folder Couldn't canonicalize: No such file or directory ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder Uploading sourcefolder/ to /user/folder/sourcefolder Entering sourcefolder/ sourcefolder/file1 sourcefolder/file2
1

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

mput -rp /home/a/ /home/b/
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy