로컬 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"'"'