ChatGPT解决这个技术问题 Extra ChatGPT

Copying files using rsync from remote server to local machine

Once I've ssh'd into my remote server, what would the command be to copy all files from a directory to a local directory on my machine?

Because you can rsync directly from your local machine.
Oh... yes I can. I see the other answers now. Thanks.
This is common task for (web) development with a good answer. I don't see why it is still closed.
I think @d.raev was referring to the fact that the question was closed as off topic (if I recall correctly I flagged for this question to be migrated to SuperUser, where I think it fits better) rather than that there was no accepted answer. Still... it was nice to have my answer accepted after all this time. :-)
@markstewie no bad feelings, it is a good question and it helped me (seems many others too) but this "closed" make it look not trust worthy so I wonted to bring some attention to it.

A
Alexandrin Rus

From your local machine:

rsync -chavzP --stats user@remote.host:/path/to/copy /path/to/local/storage

From your local machine with a non standard ssh port:

rsync -chavzP -e "ssh -p $portNumber" user@remote.host:/path/to/copy /local/path

Or from the remote host, assuming you really want to work this way and your local machine is listening on SSH:

rsync -chavzP --stats /path/to/copy user@host.remoted.from:/path/to/local/storage

See man rsync for an explanation of my usual switches.


An explanation of the command: explainshell.com/…
Wow that explainshell site is awesome.
@cmcdragonkai: indeed, the local host must be running an ssh server and be accessible to the remote host. This is one of the reasons that I prefer the first solution over the second.
Be careful when rsyncing with trailing slashes. The command given by Johnnysweb would create a directory called copy inside /path/to/local/storage. Like so /path/to/local/storage/copy. If that's what you want great. However a more common scenario is you want to copy the contents of the remote directory into a directory in your local. Then you would do /path/to/copy/ which would place the contents inside the directory /path/to/local/storage without creating a local copy directory.
I came here for an rsync command and I came away with explainshell.com. Thanks @beefsack!
B
Basil Bourque

If you have SSH access, you don't need to SSH first and then copy, just use Secure Copy (SCP) from the destination.

scp user@host:/path/file /localpath/file

Wild card characters are supported, so

scp user@host:/path/folder/* /localpath/folder

will copy all of the remote files in that folder.If copying more then one directory.

note -r will copy all sub-folders and content too.


Why use scp rather than rsync? Also, watch that your shell doesn't try to expand user@host:/path/folder/*, perhaps by using single quotes (').
I know what scp is, that wasn't my question. Why didn't you use rsync? This is what is what the question asks for, doesn't require an established SSH session and is often faster and more efficient than scp.
Remember, scp follows symlinks instead of copying them. This can lead to copying more then you expect and in loss of symlinks (they become normal folders/files).
Mondane's response is precisely the reason I found this post. Normally, I use scp for everything, but I needed to preserve permissions and symlink from server to server. Also, the speed difference (bc my newbie self definitely scped first) was vast.
Also rsync is much faster than scp.
G
Gryu

I think it is better to copy files from your local computer, because if files number or file size is very big, copying process could be interrupted if your current ssh session would be lost (broken pipe or whatever).

If you have configured ssh key to connect to your remote server, you could use the following command:

rsync -avP -e "ssh -i /home/local_user/ssh/key_to_access_remote_server.pem" remote_user@remote_host.ip:/home/remote_user/file.gz /home/local_user/Downloads/

Where v option is --verbose, a option is --archive - archive mode, P option same as --partial - keep partially transferred files, e option is --rsh=COMMAND - specifying the remote shell to use.

rsync man page