Copiando arquivo usando scp para diretório local inexistente - mensagem de erro enganosa

3

Estou escrevendo um script de shell para copiar um arquivo de um host remoto para um diretório local usando scp . Caso o diretório de destino não exista, recebo uma mensagem de erro enganosa. ou seja:

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

O erro que estou recebendo é:

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

que é intrigante ... eu esperaria algo como:

Directory /local/non-existing/directory/ does not exist
  1. Faz sentido para alguém ou é só eu?
  2. Você acha que é um defeito no scp?
  3. Estou executando o Ubuntu 14.04.3 LTS, é o mesmo em outros sistemas operacionais?
por vstrom coder 12.02.2017 / 10:21

1 resposta

5

Bug

Encontrou o erro relacionado . Parece ser corrigido no Ubuntu 14.04.5 (openssh 1: 6.6p1-2ubuntu2.8)

Há uma explicação sobre um relatório de erros Redhat :

This problem is also in original openSSH and appears when you try to copy something into non-existing directory with existing parent directory. There is missing check for this boundary condition. Error message is thrown when scp process tries to write into above mentioned file, but this file ends with slash (which is interpretation for directory) and this is the reason for current error message.

Resposta original

Não é possível reproduzir (testado no Ubuntu 14.04.5 LTS e no Linux Mint 17)

  • Se /local/non-existing/directory não existir, scp falhará com:

    /local/non-existing/directory: No such file or directory
    
  • Se /local/existing/directory existir, scp cópias file a /local/existing/directory/file

  • Se remote-host:/path/to/existing/file for um diretório, scp falhará com:

    scp: file: not a regular file
    

Resolução de problemas

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

deve fornecer informações sobre o arquivo remoto (ou possivelmente o diretório).

file /local/non-existing/directory/

deve fornecer informações sobre o diretório local

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

criará recursivamente o diretório e qualquer pai, se necessário.

Após mkdir -p , se file for realmente um arquivo e /local/non-existing/directory/ for realmente um diretório, seu comando scp deverá funcionar.

    
por 12.02.2017 / 11:58