경로에 공백이 있는 원격 Windows 호스트에 대한 scp: 대상이 명확하지 않음

경로에 공백이 있는 원격 Windows 호스트에 대한 scp: 대상이 명확하지 않음

로컬 Linux 시스템에서 원격 Windows 시스템으로 파일을 전송하려고 하는데 scp가 공백이 포함된 Windows 파일 경로를 처리하는 방식에서 일부 불일치가 발생합니다...

이렇게 하면 작동합니다. 로컬 파일 경로의 공백이 올바르게 이스케이프됩니다.

scp /home/will/file\ with\ spaces.txt remote@host:D:/Users/will/Downloads/

그러나 이는아니요"Google Drive" 폴더의 공백이 올바르게 이스케이프되더라도 작동합니다.

scp /home/will/file\ with\ spaces.txt remote@host:D:/Users/will/Google\\ Drive/Documents/Computer_Stuff/Home_Lab/folder

나는 하나를 경험했다비슷한 문제를 가진 사람들을 위한 온라인 리소스가 있지만 그 솔루션 중 어느 것도 나에게 적합하지 않습니다.

\\이스케이프 공백을 사용하거나 사용하지 않고 Windows 파일 경로를 큰따옴표, 작은따옴표로 묶어 보았습니다. 공백을 이스케이프하기 위해 이중 및 삼중 문자를 사용해 보았습니다. \\\심지어 콜론( D\:)을 명시적으로 지정해 보았습니다. 대상 파일 이름이 있지만 아무것도 없습니다. 아무것도 작동하지 않습니다.

그러다가 내가 찾았어이 답변, 그리고방법 #2만 작동합니다!왜? '", 및 포함된 Windows 파일 경로의 차이점은 무엇입니까 "'? 로컬 Linux 파일 경로에서는 따옴표를 전혀 사용하지 않고 단순히 공백을 이스케이프할 수 있지만 원격 Windows 경로에서는 그렇지 않은 이유는 무엇입니까?

답변1

질문에서 언급하고 답변했듯이여기,방법 2내 경우에 효과가 있었던 솔루션입니다. 미래의 독자들이 더 쉽게 읽을 수 있도록 답변으로 추가되었습니다.

  • 윈도우 10
  • 자식 배쉬scp

작은따옴표/큰따옴표:
scp ./myfile.txt user@host:'"/c:/AppName/a poorly named dir/sub_dir/myfile.txt"'

답변2

저는 Windows 10에 푹 빠졌어요. 이게 저에게 딱 맞는 것 같아요

scp -r user@hostname:"/Library/Application' 'Support/Adobe/Common/Plug-ins/7.0/" ./Adobe

답변3

-T옵션을 사용하십시오:

scp -T [email protected]:'"c:\path with\spaces in\it\foo.txt"' .

답변4

플랫폼:

  • Ubuntu 18.04 ARM의 scp
  • Windows 10의 OpenSSH 서버

위 답변의 작은따옴표/큰따옴표는 작동하지만 디렉터리 변수를 사용하고 싶습니다. 몇번 검색해본 결과는 아래와 같습니다.

스크립트에서 변수를 사용하려면 다음을 수행하세요.

sshpass -p "$password" scp myfile.txt user@host:'"'"$directory"'"'

관련 정보