로컬 경로에 공백이있는 원격 Linux에서 로컬 Windows 로의 scp


2

Linux 터미널에서 Windows 시스템으로 파일을 푸시하기 위해 다음 두 예제는 정상적으로 작동합니다.

scp /home/user.name/file.html user.name@local.ip.num:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test_folder/file.html"

로컬 폴더에 공백이있는 곳 에서이 작업을 수행해야하며 이름을 변경할 수 없습니다. /C:/Users/user.name/test folder/

다음 메시지가 모두 실패합니다 scp: ambiguous target

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\\\ folder/file.html'"

어떻게 작동합니까?


1
첫 번째 시도는 완전한 인수를 인용하는 것입니다 (단일 인수이므로) scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test folder/'. 그래도 작동하지 않으면 다음은 scp소스 코드를 읽고이 인수를 구문 분석하는 방법을 찾는 것입니다.
dirkt

완벽하게 일했습니다!
클레이

답변:


2
  • 완전한 인수를 사용 quotes '하거나 Double quotes "둘러 보십시오 .

    의견에서 @dirkt가 제안한 것처럼 ssh 호스트의 전체 경로 인수를 인용하면 작업이 수행됩니다. 그것은 당신의 명령을 다음과 같이 만듭니다 :

    scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test folder/'
    
  • escape sequence for space폴더 이름 사이에 사용하십시오 .

    \공백의 이스케이프 시퀀스 인 (공백이있는 백 슬래시)를 사용할 수 있습니다 . 그것은 당신의 명령을 다음과 같이 만듭니다 :

    scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test\ folder/'
    

    을주의 \사이의 공간 testfolder그것을합니다 test\ folder.

  • 아마도 need to escape twice로컬에서 먼저 탈출 한 다음 원격 끝에서 탈출 할 수 있습니다 . 이 경우 다음과 같이 작성할 수 있습니다.

    1. "'complete argument'" 다음과 같이 큰 따옴표 안의 따옴표 안에 :

      "'user.name@local.ip.num:/C:/Users/user.name/test folder/'"
      

      또는

    2. 공백을 피하고 다음과 같이 완전한 인수를 인용하십시오.

      'user.name@local.ip.num:/C:/Users/user.name/test\ folder/'
      

      또는

    3. 이와 같은 이스케이프 시퀀스를 사용하여 직접 두 번 이스케이프

      user.name@local.ip.num:/C:/Users/user.name/test\\ folder/
      

더 자세한 내용을 자유롭게 추가하십시오.


Windows 10에는 기본 OpenSSH가 있으므로 백 슬래시를 추가해도 작동하지 않습니다.
Jari Turkia

0

" 기호는 bash는 그 자체로 해석됩니다. 배쉬는 할 수있는 경우 interbretes 사이에 아무것도 디 캡슐화 그냥 몇 가지 특수 기호가있을 수 있습니다 문자열로 호출되는 명령에 outout를 제공합니다. 아포스트로피 (사용해보십시오 ' 이 떠들썩한 파티를 강제하기위한) 기호를 모든에서 문자열을보고 그냥 처음 호출 된 명령에 전달와 그 문자열. '는 이 같은 형식이어야합니다 : 당신이보고 싶다면

하지마

echo $'dont\'t'

0

CentOS 클라이언트에서 Windows 7 (SP1)로 scp하기 위해 위의 모든 옵션을 시도했지만 성공하지 못했습니다.

이것은 나를 위해 일했지만 :

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.