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

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

Linux 터미널에서 Windows 시스템으로 파일을 푸시하려면 다음 두 가지 예가 제대로 작동합니다.

scp /home/user.name/file.html [email protected]:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test_folder/file.html"

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

다음은 모두 메시지와 함께 실패합니다.scp: ambiguous target

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\\ folder/file.html'"

이것을 작동시키려면 어떻게 해야 합니까?

답변1

  • 사용해 보세요quotes '또는Double quotes "완전한 논쟁에 관한 것입니다.

    주석에서 @dirkt가 제안한 대로 SSH 호스트에 대한 전체 경로 인수를 인용하면 작업이 수행됩니다. 그러면 명령이 다음과 같이 됩니다.

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
    
  • 사용escape sequence for space폴더 이름 사이에.

    \공백의 이스케이프 시퀀스인 (백슬래시와 공백)을 사용할 수 있습니다 . 그러면 명령이 다음과 같이 됩니다.

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
    

    & \사이에 공백이 있는 것을 확인하세요 .testfoldertest\ folder.

  • 어쩌면 당신이 그럴 수도 있습니다need to escape twice먼저 로컬에서 이스케이프된 다음 원격 끝에서 이스케이프됩니다. 이 경우 다음과 같이 작성할 수 있습니다.

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

      "'[email protected]:/C:/Users/user.name/test folder/'"
      

      또는

    2. 공백을 이스케이프 처리하고 다음과 같이 전체 인수를 인용하세요.

      '[email protected]:/C:/Users/user.name/test\ folder/'
      

      또는

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

      [email protected]:/C:/Users/user.name/test\\ folder/
      

자세한 내용을 추가해 보세요.

답변2

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

그래도 이것은 나를 위해 일했습니다.

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'

답변3

이것이 여전히 관련이 있는지는 모르겠지만 (어떤 상황에서는 역효과를 낼 수 있는) 한 가지 해결책은 "?"를 사용하는 것입니다. 공간 대신:

scp "user@ip:/home/user/file?with?spaces.txt" .

답변4

그만큼"기호는 bash 자체에 의해 해석됩니다. Bash는 가능하다면 인터브레드 사이에 있는 모든 것을 캡슐화하고 특수 기호가 있을 수 있는 문자열로 호출되는 명령에 출력을 표시합니다. 아포스트로피(') 기호는 bash가 문자열을 전혀 보지 않고 먼저 호출된 명령에 전달하도록 강제합니다. 그 문자열은'다음과 같은 형식이어야 합니다.

~하지 않다

echo $'dont\'t'

관련 정보