허점

허점

을 사용하는 쉘 스크립트를 작성 중입니다 scp. 대상 디렉토리가 존재하지 않으면 오해의 소지가 있는 오류 메시지가 나타납니다. 즉:

scp user@remote-host:/path/to/existing/file /local/non-existing/directory/

내가 받은 오류는 다음과 같습니다.

/local/non-existing/directory/: Is a directory

수수께끼네요... 다음과 같았으면 좋겠습니다.

Directory /local/non-existing/directory/ does not exist
  1. 이것이 누구에게나 이해가 되는가, 아니면 나만 그런가?
  2. 이것이 scp의 결함이라고 생각하십니까?
  3. 저는 Ubuntu 14.04.3 LTS를 실행하고 있습니다. 다른 운영 체제에서도 마찬가지입니까?

답변1

허점

그것을 발견관련 오류. Ubuntu 14.04.5(openssh 1:6.6p1-2ubuntu2.8)에서 수정된 것 같습니다.

에 대한 설명이 있습니다.Red Hat 버그 보고서:

이 문제는 원시 openSSH에도 존재하며 기존 상위 디렉토리가 있는 존재하지 않는 디렉토리에 무언가를 복사하려고 할 때 발생합니다. 이 경계 조건에 대한 확인이 누락되었습니다. scp 프로세스가 위 파일에 쓰려고 할 때 오류 메시지가 발생하지만 파일이 슬래시(디렉토리 해석)로 끝나며 이것이 현재 오류 메시지의 이유입니다.

원래 답변

재현할 수 없습니다(Ubuntu 14.04.5 LTS 및 Linux Mint 17에서 테스트).

  • /local/non-existing/directory존재하지 않으면 다음 과 scp같이 실패합니다.

    /local/non-existing/directory: No such file or directory
    
  • /local/existing/directory있는 경우 다음 으로 scp복사하세요 .file/local/existing/directory/file

  • remote-host:/path/to/existing/file디렉터리인 경우 scp다음과 같이 실패합니다.

    scp: file: not a regular file
    

문제 해결

ssh user@remote-host "file /path/to/existing/file"

원격 파일(또는 디렉토리)에 대한 정보를 제공해야 합니다.

file /local/non-existing/directory/

당신의 로컬 디렉토리에 대한 정보를 제공해야합니다

mkdir -p /local/non-existing/directory/

필요한 경우 디렉터리는 상위 디렉터리와 함께 반복적으로 생성됩니다.

그 후에 mkdir -p그것이 file실제로 파일이고 /local/non-existing/directory/실제로 디렉토리라면 scp명령이 작동할 것입니다.

관련 정보