60

I want to be able to transfer a directory and all its files from my local machine to my remote one. I dont use SCP much so I am a bit confused.

I am connected to my remote machine via ssh and I typed in the command

scp name127.0.0.1:local/machine/path/to/directory filename

the local/machine/path/to/directory is the value i got from using pwd in the desired directory on my local host.

I am currently getting the error

No such file or directory

Liondancer
  • 15,721
  • 51
  • 149
  • 255
  • 5
    Your mistake is where you have connected to the remote machine and then typed the command. You should run the command from your own system in the directory where the file exist not when you have connected.. – Zeinab Ghaffarnasab Sep 27 '18 at 05:51
  • I just had this issue and the problem was where to run the command. If I want to transfer from A to B machine - run ssh on A and connect to B, then run scp command on A ( in another terminal) and enter paths accordingly – iamalminko Mar 14 '22 at 21:10

12 Answers12

95

Looks like you are trying to copy to a local machine with that command.

An example scp looks more like the command below:

Copy the file "foobar.txt" from the local host to a remote host

$ scp foobar.txt your_username@remotehost.edu:/some/remote/directory

scp "the_file" your_username@the_remote_host:the/path/to/the/directory


to send a directory:

Copy the directory "foo" from the local host to a remote host's directory "bar"

$ scp -r foo your_username@remotehost.edu:/some/remote/directory/bar

scp -r "the_directory_to_copy" your_username@the_remote_host:the/path/to/the/directory/to/copy/to


and to copy from remote host to local:

Copy the file "foobar.txt" from a remote host to the local host

$ scp your_username@remotehost.edu:foobar.txt /your/local/directory

scp your_username@the_remote_host:the_file /your/local/directory


and to include port number:

Copy the file "foobar.txt" from a remote host with port 8080 to the local host

$ scp -P 8080 your_username@remotehost.edu:foobar.txt /your/local/directory

scp -P port_number your_username@the_remote_host:the_file /your/local/directory


From a windows machine to linux machine using putty

pscp -r <directory_to_copy> username@remotehost:/path/to/directory/on/remote/host

Craicerjack
  • 6,203
  • 2
  • 31
  • 39
  • 1
    Thanks for the help. This comes close to solving my problem but not quite yet. I want to be able to send the directory and all of its contents. What I tried is `scp -r path/to/directory username@remotehost` – Liondancer Oct 13 '14 at 18:24
  • 1
    In case you need to explicitly specify port number do it by using -P portNumber. e.g.` scp -P 2200 bprajapati@192.168.202.124:/tmp/bs-404 ~/Documents` – Vinay Prajapati Jan 08 '16 at 06:49
  • Just an important point that tripped me up. If using the `scp://user@host:port/path/to/file` syntax for a target or source, note that the first '/' after the port number just delimits the port from the path. So, if you want to use an absolute path, use two backslash characters after the port number: `scp://user@host:port//my/absolute/path/to/file` – Chris May 16 '21 at 11:26
  • 1
    Came here to find out a missing ":" on my syntax. I was using `user@remote/path`. – fde-capu Mar 17 '22 at 20:45
38

i had a kind of similar problem. i tried to copy from a server to my desktop and always got the same message for the local path. the problem was, i already was logged in to my server per ssh, so it was searching for the local path in the server path.

solution: i had to log out and run the command again and it worked

dw-herrmann
  • 481
  • 4
  • 5
6

In my case I had to specify the Port Number using

scp -P 2222 username@hostip:/directory/ /localdirectory/
joelschmid
  • 828
  • 1
  • 16
  • 32
  • 1
    And make sure you're using upper-case P instead of p. If you ask me the "no such file" error message given by scp is extremely misleading and possibly even classifiable as a bug. For example if you make the same mistake with ssh, it says "ssh: connect to host 2222 port 2222: Invalid argument" which is MUCH more helpful. – iforce2d Sep 08 '20 at 23:38
5

Your problem can be caused by different things. I will provide you three possible scenarios in Linux:

  • The File location

When you use scp name , you mean that your File name is in Home directory. When it is in Home but inside in another Folder, for example, my_folder, you should write:

scp /home/my-username/my_folder/name my-username@127.0.0.1:/Path....
  • You File Permission

You must know the File Permission your File has. If you have Read-only you should change it.

To change the Permission:

As Root ,sudo caja ( the default file manager for the MATE Desktop) or another file manager ,then with you Mouse , right-click to the File name , select Properties + Permissions and change it on Group and Other to Read and write .

Or with chmod .

  • You Port Number

Maybe you remote machine or Server can only communicate with a Port Number, so you should write -P and the Port Number.

scp -P 22 /home/my-username/my_folder/name my-usernamee@127.0.0.1 /var/www/html
3edf1w
  • 105
  • 2
  • 9
1

You also need to make sure what is in the .bashrc file of the user.

I've also got this ridiculous error because I put cd and ls commands in there, as it was mean to let them see the current files & directories when the user is has logged in from ssh.

1

The filename should go at the end of the path to the directory. That is, it should be the full path to the file. You are doing this from a command line, and you have a working directory for that command line (on your local machine), this is the directory that your file will be downloaded to. The final argument in your command is only what you want the name of the file to be. So, first, change directory to where you want the file to land. I'm doing this from git bash on a Windows machine, so it looks like this:

cd C:\Users\myUserName\Downloads

Now that I have my working directory where I want the file to go:

scp -i 'c:\Users\myUserName\.ssh\AWSkeyfile.pem' ec2-user@xx.xxx.xxx.xxx:/home/ec2-user/IwantThisFile.tar IgotThisFile.tar

Or, in your case:

cd /local/path/where/you/want/the/file/to/land
scp name@127.0.0.1:/local/machine/path/to/directory/filename filename
Adam Winter
  • 1,680
  • 1
  • 12
  • 26
0

Be sure the folder from where you send the file does not contain space !

I was trying to send a file to a remote server from my windows machine from VS code terminal, and I got this error even if the file was here.

It's because the folder where the file was contained space in its name...

Astariul
  • 2,190
  • 4
  • 24
  • 41
0

If you want to copy everything in a Folder + have a special Port use this one. Works for me on Ubuntu 18.04 and a local machine with Mac OS X.

-r for recursive
-P for Port

scp -rP 1234 /Your_Directory/Source_Folder/ username@yourdomain.com:/target/folder
help-info.de
  • 6,695
  • 16
  • 39
  • 41
  • There are other answers that provide the OP's question, and they were posted some time ago. When posting an answer [see: How do I write a good answer?](https://stackoverflow.com/help/how-to-answer), please make sure you add either a new solution, or a substantially better explanation, especially when answering older questions. – help-info.de Oct 27 '19 at 09:28
0

As @Astariul said, path to the file might cause this bug.
In addition, any parent directory which contains non-ASCII character, for example Chinese, will cause this.
In that case, you should rename you parent directory

HuangHudson
  • 11
  • 1
  • 3
0

This happened to me and I solved it. This problem can be because the file you are trying to get is not existing (typo in the name of file or folder?) or because it is invisible to the user that you enter in scp. The problem in my case was that the files that I wanted to get from remote machine were created by another user (root on my case), so, those files were invisible

To fix, I did: ssh myuser@myserver chown myuser:myuser myfile exit scp mysuer@myserver:/home/myuser/myfile /localfolder/myfile

Arpatma
  • 31
  • 3
0

For me on my mac,

I just have to run the command from my MAC terminal

scp -r root@ip_addres:/root/source /Users/path/Desktop/others/destination

EngrEric
  • 4,792
  • 1
  • 8
  • 6
0

In my case, the remote folder I was trying to upload to was belonging to root. I had to chown it to the correct user:group.

Tim Autin
  • 6,043
  • 5
  • 46
  • 76