How to use cygwin with sshd to scp a file from the Program Files (x86) directory on another machine


I have a Linux machine and 2 Windows machines. Each Windows machine contains cygwin with an sshd daemon. The Linux machine is the main one I'm using. On the first Windows machine which is XP, I have a file on there that I want to compare with a file on the second Windows machine which is Windows 7.

My thinking is that once I ssh into the XP machine, I should easily be able to use the scp command to grab the file on the Windows 7 machine and then run a diff to compare the 2 files but it first gets tripped up on the spaces within "Program Files" and after using \ to escape those, it gets tripped up on the parenthesis.

Escaped spaces

$ scp root@\ Files\ (x86)/myfile.xml .
-bash: syntax error near unexpected token `('

Escaped slashes

$ scp root@\ Files\ \(x86\)/myfile.xml .
root@'s password: 
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `scp -f /cygdrive/c/Program Files (x86)/myfile.xml'

Used a variable

$ scpfile="/cygdrive/c/Program Files (x86)/myfile.xml"
$ scp root@$scpfile .
root@'s password: 
scp: /cygdrive/c/Program: No such file or directory
cp: cannot stat `Files': No such file or directory
cp: cannot stat `(x86)/myfile.xml': No such file or directory

I also tried using a variable with escape slashes but no luck.

If I move myfile.xml to /cygdrive/c/ and then scp it, it will work fine. How do I scp files that are in a directory that contain parenthesis using cygwin's scp?

Best Solution

If you create a soft link to the Program Files (x86) directory and make the name without spaces or parentheses, then you can use that directory in conjunction with scp.

On Cygwin (

cd c:
ln -s "Program Files (x86)" PF86

On Linux (home computer that you're running scp on)

scp root@ .

And it works

Related Question