Помилка використання SCP: "не звичайний файл"


73

Я деякий час шукав, і не можу знайти визначення звичайного файлу. Мій шлях постійний (я починаю з /), і я підключаюся до

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

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

scp: .: not a regular file

Відповіді:


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

Я відчуваю себе так неймовірно нерозумно, прочитавши це. джерело, місце призначення! Да!
Хаїм Елія

112

Копіюючи каталог, слід скористатися -rопцією:

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

1
Хоча прийнята відповідь технічно відповідає на фактичне запитання, ця відповідь, швидше за все, шукають люди, які заходять на цю сторінку.
cgnorthcutt

4

випуск синтаксису - видаліть пробіл між ними

root @ IP:

і

/ шлях


Але тоді ти вже не маєш цілі scp.
Бернхард

Так. Я натиснув Enter занадто швидко і не вистачає представника, щоб виправити це. здивований, я навіть тут можу коментувати. ура.
lurker

2
Я думаю, ви завжди можете коментувати свої власні внески, і я думав, що ви також завжди можете їх редагувати?
Бернхард

Я не думаю, що це може спричинити цю помилкуnot a regular file
HISI

@hisi використовувати -rяк scp аргумент.
Анкур Лорія

2

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

Команда зверху копіює файл з віддаленого сервера на комп'ютер. Якщо ви введете лише текст, scp root@IP:він спробує скопіювати домашній каталог root (scp home home .).

Тому потрібно вказати точний шлях до файлу


Це спрацювало. Дякую купу, чоловіче. Тримай!
Джефм

2

Ви отримуєте цю помилку, оскільки ви намагаєтесь скопіювати папку, а не файл, а значить, слід копіювати файли рекурсивно за допомогою -rпараметра

Використовуйте команду нижче, коли копіюєте файли з віддаленої машини на локальну машину

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

АБО

При копіюванні файлів з локальної машини на віддалену машину

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.