If you’ve been using SSH for any amount of time, you probably already had the need to copy a local file to your remote host.
For that you can use
scp (secure copy). You specify the local file name, the
target host and the user to be used to
ssh, and the destination path on the
scp my_file.txt <user>@<hostname_or_ip>:/home/admin
What if you need to copy over an entire directory and all of its descendants?
Just add the
scp -r my_directory <user>@<host>:/home/admin/some/path
Doing it better with
scp is perfectly fine for a one time copy of a moderately sized directory.
If you however end up copying the same directory over and over (to update local
changes on a server, for example),
rsync is a better and much more efficient
rsync -av my_directory <user>@<host>:/home/admin/some/path
-a option, rsync will use archival mode, preserving the modification
timestamps, file permissions and carrying over symbolic links as such.
It might not be ideal for everyone (of course you can tune it!), but by keeping
the modification timestamps intact,
rsync will simply skip files that have not
been modified since the last upload, saving you time and bandwidth.
Bonus: copying a directory to an AWS S3 bucket
If you have an S3 bucket, and the
awscli tool installed, copying an entire
directory over to the bucket is as simple as:
aws s3 cp my_directory s3://<my_bucket>/my/path
This also comes in the
sync, which has a
--delete option that allows to
remove files from the bucket that have been deleted locally:
aws s3 sync --delete my_directory s3://<my_bucket>/my/path
Finally, the same command can be used to copy from S3 to your machine, simply reversing the order of the options:
aws s3 sync my_directory s3://<my_bucket>/my/path my_local_directory