#Что происходит и когда это важно
Команда scp отвечает No such file or directory либо разбивает имя файла на части при передаче через shell. Проблема не обязательно связана с разрешениями или авторизацией.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не заключён локальный путь в кавычкиЛокальная оболочка разделяет имя по пробелам. | scp пытается прочесть первый фрагмент названия. | Кавычки вокруг локального пути. |
| Удалённый путь разобран иначеСтарый scp использует удалённую оболочку, современный — SFTP. | На другом компьютере тот же синтаксис работает иначе. | Уточнить режим и безопасно использовать sftp. |
| Отсутствует каталог назначенияИмя задано верно, но папки реально нет. | После входа по sftp ls не показывает путь. | Проверить существование папки, не создавать от root вслепую. |
#Пошаговая диагностика и исправление
- Определите сторону пути с пробеламиОткройте терминал и найдите локальный файл через файловый менеджер. При копировании путь можно получить действием «Копировать как путь», если оно есть, либо вручную. Не используйте дополнительные символы вокруг названия самого файла, если они являются частью имени.
- Убедитесь, что файл существует локальноВыполните
ls -l "Мой файл.txt"в папке, где расположен документ. Кавычки нужны, чтобы оболочка не разделила имя. Если файл не найден, откройте в терминале нужный каталог черезcdс кавычками либо используйте полный путь. - Уточните версию scpВыполните
ssh -V: версия OpenSSH поможет понять поддержку SFTP. В актуальных версиях scp обычно работает через SFTP; в старых, использующих удалённую оболочку, нужны дополнительные уровни кавычек и экранирования. - Проверьте доступ к серверу отдельноВыполните
sftp пользователь@серверс реальным адресом. После авторизации можно использоватьpwd,ls,cdдля удалённой стороны иlpwd,lls,lcdдля локальной. Не начинайте с записи в системный каталог. - Передайте файл через SFTP с кавычкамиВ интерактивном
sftpперейдите в проверенную удалённую папку командойcd "Папка с пробелами"и в локальную папкуlcd "Локальная папка"; затем используйтеput "Мой файл.txt". Путь в кавычках должен совпадать с реальным именем. Командаputперезапишет одноимённый файл на сервере, поэтому заранее проверьтеlsи выберите безопасное имя для теста. - Если нужен именно scp, начните с современного синтаксисаДля локального файла в текущем каталоге можно попробовать
scp "Мой файл.txt" "пользователь@сервер:каталог с пробелами/", заменив адрес и каталог. Не применяйте-Oавтоматически: принудительный старый SCP-протокол иначе трактует кавычки и часто запрещён правилами безопасности. - Проверьте файл и при ошибке вернитесь к sftpНа удалённой стороне выполните
lsв каталоге назначения, сравните имя и размер; при необходимости сверьте контрольную сумму SHA256 на обеих машинах. Если scp не справился, используйте SFTP с проверенными путями вместо изменения прав всей папки.
#Команды из инструкции с пояснениями
ls -l "Мой файл.txt"sftp пользователь@серверscp "Мой файл.txt" "пользователь@сервер:каталог с пробелами/"Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Файл с пробелами в имени появляется в нужном каталоге без переименования и совпадает по размеру/контрольной сумме; другие файлы не перезаписаны.
#Если проблема не устранена
Если в современном scp копирование всё равно не работает, проверьте SFTP-подсистему и права только целевого каталога у администратора. Не отключайте защиту SSH для устранения кавычек.