Frequently Asked Questions
Transferring files interactively with sftp
scp
is useful, but what if we don’t know the exact location of what we want to transfer? Or
perhaps we’re simply not sure which files we want to transfer yet. sftp
is an interactive way of
downloading and uploading files. Let’s connect to a cluster, using sftp
- you’ll notice it works
the same way as SSH:
sftp yourUsername@remote.computer.address
This will start what appears to be a bash shell (though our prompt says sftp>
). However we only
have access to a limited number of commands. We can see which commands are available with help
:
sftp> help
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-afPpRr] remote [local] Download file
reget [-fPpRr] remote [local] Resume download file
reput [-fPpRr] [local] remote Resume upload file
help Display this help text
lcd path Change local directory to 'path'
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln [-s] oldpath newpath Link remote file (-s for symlink)
lpwd Print local working directory
ls [-1afhlnrSt] [path] Display remote directory listing
# omitted further output for clarity
Notice the presence of multiple commands that make mention of local and remote. We are actually connected to two computers at once (with two working directories!).
To show our remote working directory:
sftp> pwd
Remote working directory: /global/home/yourUsername
To show our local working directory, we add an l
in front of the command:
sftp> lpwd
Local working directory: /home/jeff/Documents/teaching/hpc-intro
The same pattern follows for all other commands:
ls
shows the contents of our remote directory, whilells
shows our local directory contents.cd
changes the remote directory,lcd
changes the local one.
To upload a file, we type put some-file.txt
(tab-completion works here).
sftp> put config.toml
Uploading config.toml to /global/home/yourUsername/config.toml
config.toml 100% 713 2.4KB/s 00:00
To download a file we type get some-file.txt
:
sftp> get config.toml
Fetching /global/home/yourUsername/config.toml to config.toml
/global/home/yourUsername/config.toml 100% 713 9.3KB/s 00:00
And we can recursively put/get files by just adding -r
. Note that the directory needs to be
present beforehand.
sftp> mkdir content
sftp> put -r content/
Uploading content/ to /global/home/yourUsername/content
Entering content/
content/scheduler.md 100% 11KB 21.4KB/s 00:00
content/index.md 100% 1051 7.2KB/s 00:00
content/transferring-files.md 100% 6117 36.6KB/s 00:00
content/.transferring-files.md.sw 100% 24KB 28.4KB/s 00:00
content/cluster.md 100% 5542 35.0KB/s 00:00
content/modules.md 100% 17KB 158.0KB/s 00:00
content/resources.md 100% 1115 29.9KB/s 00:00
To quit, we type exit
or bye
.