Копирование файла с использованием scp в несуществующий локальный каталог – вводящее в заблуждение сообщение об ошибке

Я пишу сценарий оболочки для копирования файла с удаленного хоста в локальный каталог с помощью 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, это то же самое в других операционных системах?

  • Как скопировать с помощью SCP между двумя серверами с помощью ключа auth?
  • scp: localhost пароль не принимается
  • Где scp помещал эти файлы?
  • Передача `scp` закрывается, когда я закрываю оболочку?
  • передавать файл в удаленный каталог только в том случае, если он не существует без замены
  • Как передать файл с удаленного сервера на локальный компьютер
  • Как выполнить rsync только определенный список файлов в том же месте на другом сервере
  • разрешение scp отказано после «затвердения» с помощью бастилии
  • One Solution collect form web for “Копирование файла с использованием scp в несуществующий локальный каталог – вводящее в заблуждение сообщение об ошибке”

    ошибка

    Найдено связанная ошибка . Кажется, он исправлен в Ubuntu 14.04.5 (openssh 1: 6.6p1-2ubuntu2.8)

    В отчете об ошибке Redhat есть объяснение:

    Эта проблема также находится в исходном openSSH и появляется, когда вы пытаетесь скопировать что-то в несуществующий каталог с существующим родительским каталогом. Отсутствует проверка этого граничного условия. Сообщение об ошибке вызывается, когда процесс scp пытается записать в вышеупомянутый файл, но этот файл заканчивается косой чертой (что является интерпретацией для каталога), и это является причиной появления текущего сообщения об ошибке.

    Оригинальный ответ

    Невозможно воспроизвести (проверено на Ubuntu 14.04.5 LTS и Linux Mint 17)

    • Если /local/non-existing/directory not /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/ 

    wil рекурсивно создайте каталог и любой родитель, если это необходимо.

    После mkdir -p , если file действительно является файлом и /local/non-existing/directory/ действительно является каталогом, ваша команда scp должна работать.

    Linux и Unix - лучшая ОС в мире.