Erro ao usar o SCP: "não é um arquivo comum"

73

Estou pesquisando há um tempo e não consigo encontrar a definição de um arquivo regular. Meu caminho é permanente (começo em /) e estou me conectando a

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

Resulta em uma solicitação de senha e depois ...

scp: .: not a regular file
JeffM
fonte

Respostas:

59

Um arquivo regular é um arquivo que não é um diretório ou tipos mais exóticos de arquivos "especiais" , como pipes nomeados, dispositivos, soquetes, portas, etc. Links simbólicos também não são arquivos regulares, mas se comportam como seu destino quando um aplicativo está acessando o conteúdo do arquivo.

Você passou root@IP:como a origem da cópia e /path/to/picture.jpgcomo o destino. A fonte é o diretório inicial do usuário rootna máquina IP. Isso é útil como destino, mas não como fonte. O que você digitou necessário para copiar um diretório em um arquivo; scpnão é possível copiar um diretório, a menos que você solicite uma cópia recursiva com a -ropção (e ele se recusaria a sobrescrever um arquivo existente por um diretório, mesmo -rque fosse, mas sobrescreveria silenciosamente um arquivo regular se a origem fosse um arquivo regular).

Se /path/to/picture.jpgfor o caminho na máquina remota do arquivo que você deseja copiar, cole o nome do arquivo na especificação do host. É o dois pontos :que separa o nome do host do caminho remoto. Você precisará especificar um destino também.

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

Se você deseja copiar o arquivo local /path/to/picture.jpgpara o host remoto, é necessário trocar os argumentos. Os comandos de cópia do Unix colocam a (s) fonte (s) em primeiro lugar e o destino em último.

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

Se você deseja copiar o arquivo remoto /path/to/picture.jpgpara o mesmo local localmente, é necessário repetir o caminho. Você pode fazer com que seu shell repita por você (menos digitação, menos legibilidade).

scp root@IP:/path/to/picture.jpg /path/to/picture.jpg
scp {root@IP:,}/path/to/picture.jpg
Gilles 'SO- parar de ser mau'
fonte
2
verifique se não há espaços entre o nome do host e o arquivo
chris
Eu me sinto tão incrivelmente bobo depois de ler isso. fonte de destino! Duh!
Chaim Eliyah
112

Ao copiar um diretório, você deve usar a -ropção:

scp -r root@IP:/path/to/file /path/to/filedestination
user48435
fonte
11
Embora a resposta aceita tecnicamente responda à pergunta real, é provável que esta resposta seja o que as pessoas que acessam esta página estão procurando.
cgnorthcutt
4

problema de sintaxe - remova o espaço em branco entre

root @ IP:

e

/caminho

espreitador
fonte
Mas, então você não tem mais um alvo scp.
21282 Bernhard
Sim. pressionei enter muito rapidamente e falta o representante para corrigi-lo. surpreso eu posso até comentar aqui. Felicidades.
Lurker
2
Acho que você pode sempre comentar suas próprias contribuições e achei que você também poderia editá-las.
Bernhard
Eu não thik que podem causar esse erronot a regular file
HISI
@hisi use -rcomo argumento scp.
Ankur Loriya
2

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

O comando acima copia um arquivo do servidor remoto para o seu computador. Se você digitar apenas, scp root@IP:ele tentará copiar o diretório inicial do root (home dos usuários do scp .).

Então, você precisa fornecer o caminho exato para o arquivo

Manula Waidyanatha
fonte
Isso funcionou. Muito obrigado, cara. Mantem!
JeffM 23/10/12
2

Você está recebendo esse erro porque está tentando copiar uma pasta e não um arquivo e, portanto, deve copiar seus arquivos recursivamente usando a -ropção

Use o comando abaixo ao copiar arquivos da máquina remota para a máquina local

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

OU

Ao copiar arquivos da máquina local para a máquina remota

scp -r /path/to/file root@RemoteIP:/path/to/filedestination
Yogesh Darji
fonte
0
scp root@IP:/path/to/*.jpg  /path/to/filedestination/

Isso funcionará (pelo menos no meu Mac)

user253616
fonte