88

I try to copy files from a linux (ubuntu) machine to an external hard drive mounted on a mac but got an error message :

scp: ambiguous target

What I did is, I'm on a mac, ssh to the linux machine where files are. Then use the following command :

scp fileToCopy myMacUser@myMacMachine:/Volumes/MyExternalDrive/targetDirectory

What did I do wrong ? What is the good command to use in this case ?

JamesThomasMoon
  • 752
  • 1
  • 6
  • 18
bob
  • 983
  • 1
  • 6
  • 6
  • 2
    Happened to me when I had an extra param (`-t`; a remnant from a previous `ssh` command) in the arg list; apparently it is not supported by `scp` but the error I got was `ambiguous target` :( – Janaka Bandara Sep 12 '18 at 11:11

3 Answers3

136

If you have white space in a path, you have to escape the characters by using double backslashes \\ and enclosing the entire path in quotes:

scp myfile.txt user@192.168.1.100:"/file\\ path\\ with\\ spaces/myfile.txt"
Iulian Onofrei
  • 312
  • 5
  • 17
Atnaize
  • 1,504
  • 1
  • 11
  • 11
  • 7
    yes, that is it ! I first tried with double \\ but didn't work and then I tried adding " " around my path with \\. That does the job. Thanks. – bob Jan 07 '16 at 09:33
  • I have to look this up every time! the error message should say you have to escape spaces 3 times... – codenamejames May 08 '18 at 02:10
  • 1
    Wrapping the remote path in quotes was key for me – sam452 Jul 23 '18 at 19:45
  • 4
    Single quotes and single backslashes works just as well. – andrew lorien Nov 19 '18 at 07:44
  • 4
    Triple backslashes without quotes works also. – pizzapants184 Dec 17 '18 at 20:49
  • 10
    Double quotes in single qoutes without escaping spaces also work (`scp myfile.txt user@192.168.1.100:'"/file path with spaces/myfile.txt"'`). In fact you must escape the filename twice: first time from the local shell, and second time from the remote one. – mik Jul 19 '19 at 14:00
  • 1
    Per @sam452 key is to wrap ONLY THE REMOTE TARGET in quotes. Wrapping the local file kept giving me "no such file or directory" errors – JoelAZ Oct 24 '19 at 00:53
  • You can also single-escape the whitespace and use single quotes, like `scp file.txt remotehost:'/dir\ with\ spaces'` – ACK_stoverflow Feb 07 '21 at 19:40
18

I found that two sets of quotes worked for me, around the target location. Double quotes outside, and single quotes inside the double quotes. For example:

scp "my local file.txt" user@192.168.1.100:"'/folder/my spacey folder name/'"

The outside set of quotes are for the local shell, and the inside quotes are for the remote shell. Thanks to @mik for the suggestion in comments.

kristianp
  • 281
  • 2
  • 4
1

You need to put quotes so that spaces won't be misinterpreted. Instead of doing scp file Server:/folder\ location/ you should do scp file "Server:/folder\ location/"

Code42
  • 197
  • 1
  • 2
  • 10