Ошибка при использовании SCP: «не обычный файл»

73

Я искал некоторое время, и я не могу найти определение обычного файла. Мой путь постоянен (я начинаю с /), и я подключаюсь к

scp root@IP: /path/to/picture.jpg

Результаты в запросе на пароль, а затем ...

scp: .: not a regular file
JeffM
источник

Ответы:

59

Обычный файл - это файл, который не является каталогом или более экзотическими видами «специальных» файлов, таких как именованные каналы, устройства, сокеты, двери и т. Д. Символические ссылки также не являются обычными файлами, но они ведут себя как цель, когда приложение обращается к содержимому файла.

Вы передали root@IP:в качестве источника копии и в /path/to/picture.jpgкачестве места назначения. Источником является домашний каталог пользователя rootна машине IP. Это полезно в качестве пункта назначения, но не в качестве источника. То, что вы ввели, требуется для копирования каталога в файл; scpне может скопировать каталог, если вы не запросите рекурсивную копию с -rпараметром (и он откажется перезаписать существующий файл с каталогом, даже если -r, но он спокойно перезапишет обычный файл, если исходный файл был обычным файлом).

Если /path/to/picture.jpgэто путь на удаленном компьютере файла, который вы хотите скопировать, вам нужно привязать имя файла к спецификации хоста. Это двоеточие, :которое отделяет имя хоста от удаленного пути. Вам также нужно будет указать пункт назначения.

scp root@IP:/path/to/picture.jpg /some/destination

Если вы хотите скопировать локальный файл /path/to/picture.jpgна удаленный хост, вам необходимо поменять местами аргументы. Команды копирования Unix ставят источник (источники) первым, а место назначения последним.

scp /path/to/picture.jpg root@IP:

Если вы хотите скопировать удаленный файл /path/to/picture.jpgв то же место локально, вам нужно повторить путь. Вы можете сделать так, чтобы ваша оболочка повторяла за вас работу (меньше печатания, меньше читаемости).

scp root@IP:/path/to/picture.jpg /path/to/picture.jpg
scp {root@IP:,}/path/to/picture.jpg
Жиль "ТАК - перестань быть злым"
источник
2
убедитесь, что между именем хоста и файлом нет пробелов
chris
Я чувствую себя невероятно глупо после прочтения этого. источник назначение! Duh!
Хаим Элия
112

При копировании каталога вы должны использовать -rопцию:

scp -r root@IP:/path/to/file /path/to/filedestination
user48435
источник
1
Хотя принятый ответ технически отвечает на фактический вопрос, этот ответ, скорее всего, то, что ищут люди, которые приходят на эту страницу.
cgnorthcutt
4

синтаксическая проблема - удалить пробел между

корень @ IP:

а также

/дорожка

Lurker
источник
Но тогда у вас больше нет цели scp.
Бернхард
Ага. я нажал ввод слишком быстро и не хватает представителя, чтобы исправить это. удивлен, я могу даже прокомментировать здесь. веселит.
Люркер
2
Я думаю, что вы всегда можете прокомментировать свой вклад, и я подумал, что вы также всегда можете их редактировать?
Бернхард
Я не думаю, что это может вызвать эту ошибкуnot a regular file
HISI
@hisi использовать в -rкачестве аргумента scp.
Анкур Лория
2

scp root@IP:/path/to/file /path/to/filedestination

Выше команда копирует файл с удаленного сервера на ваш компьютер. Если вы напечатаете только, scp root@IP:он попытается скопировать домашний каталог root (scp users home .).

Так что вам нужно указать точный путь к файлу

Манула Вайдьянатха
источник
Это сработало. Спасибо большое, чувак. Так держать!
JeffM
2

Вы получаете эту ошибку, потому что вы пытаетесь скопировать папку, а не файл, и, следовательно, вы должны копировать файлы рекурсивно, используя -rопцию

Используйте команду ниже при копировании файлов с удаленного компьютера на локальный компьютер

scp -r root@RemoteIP:/path/to/file /path/to/filedestination

ИЛИ ЖЕ

При копировании файлов с локального компьютера на удаленный компьютер

scp -r /path/to/file root@RemoteIP:/path/to/filedestination
Йогеш Дарджи
источник
0
scp root@IP:/path/to/*.jpg  /path/to/filedestination/

Это будет работать (по крайней мере, на моем Mac)

user253616
источник