SCP提示“不是常规文件”

60

在Linux上使用scp时,我遇到了一个问题,它显示“不是普通文件”。我查看了其他关于此问题的问题/答案,但我无法找出问题出在哪里...

scp aa@aa:/home/pictures/file.fits .

file.fitsaa@aa/home/pictures目录复制到当前目录。我还尝试了不使用/ home / ,但仍然无法正常工作...

你明白出了什么问题吗?


3
尝试: scp aa@aa:~/pictures/file.fits . (该命令是用于从远程服务器上将文件 file.fits 复制到本地当前目录下的命令) - ryekayo
1
也许路径不正确,应该包含您的Linux用户名。/home/<user>/pictures,是吗? - Zoli
在这种情况下,Tilda将成为您最好的朋友:)。不要在此情况下扩展您的目录路径。现在我在想,您的命令无论如何都不起作用。如果您要添加整个目录,它会看起来像这样:scp aa@aa:/home/aa/pictures/file.fits . - ryekayo
使用ssh登录(ssh aa@aa),并输入命令:file /home/pictures/file.fits,告诉我们它的输出是什么。 - hyde
只需切换到 rsync,就能为您节省时间和精力。使用 rsync -azHvu aa@aa:/home/pictures/file.fits .。这将允许 rsync 递归地复制并跟随符号链接,并显示(详细)正在复制的内容。 - alvits
显示剩余2条评论
9个回答

104

我刚刚测试了一下,发现scp至少有3种情况会返回not a regular file:

  1. 文件实际上是一个目录。
  2. 文件是一个命名管道(也称为FIFO)。
  3. 文件是一个设备文件。

第一种情况最有可能。如果你想用scp传输整个目录结构,请使用-r选项表示递归复制。


27
如果您还没有清醒过来,并且把源地址和目标地址反了,试图从目标地址复制一个不存在的文件到源地址,也会发生这种情况。 - BenAlabaster
1
这意味着读取标准输入并写入标准输出,就像sftp -b <(echo get file /dev/fd/1)一样。 - ceving
1
我也遇到了符号链接的问题。 - codewandler
我正在尝试处理第二种情况(实际上,我试图复制物理磁盘(例如/dev/sda,但实际名称略有不同。可能的解决方案是将磁盘管道传输到FIFO,然后将其scp到我的主机)。 - quant2016

31

“/home/pictures/file.fits”必须是远程服务器上实际文件系统对象的名称。如果不是,scp会给出不同的错误消息。

我了解到FITS是一种图像格式。我猜测“/home/pictures/file.fits”是远程服务器上包含FITS文件或类似文件的目录名称。

要使用scp复制目录,您需要提供“-r”标志:

scp -r aa@aa:/home/pictures/file.fits .

7
要使用scp复制目录,必须加上“-r”标志。 - wruckie
这解决了我遇到的一个问题,即尝试传输UTM虚拟机文件时...或者我以为是这样。.utm是一个目录,所以我需要使用'-r'参数。 - Bagels1b
这解决了我之前遇到的问题,我试图使用scp传输UTM虚拟机文件...或者我以为是这样。 .utm是一个目录,所以我需要加上'-r'参数。 - undefined

12

这种错误的一种可能原因是,如果您在第一个路径之前有空格,就会出现以下情况:

scp myUserName@HostName: /path/to/file  /path/to/new/file                            ^

修复方法,只需去掉空格:

scp myUserName@HostName:/path/to/file  /path/to/new/file

7

作为教授许多人基本系统管理员技能的人,我必须说在90%的情况下,这是因为他们正在尝试复制目录而没有传递-r标志。 来源

只需使用-r标志即可。例如,从远程复制到本地:

scp -r root@IP:/path/on/server/ /path/on/local/pc

5

可能您正在使用目录/文件夹。

如果是这种情况,您需要执行以下操作:

  1. 首先,压缩文件夹。通过运行以下命令:

    zip -r 文件夹名称.zip 文件夹名称

  2. 然后像平常一样使用scp命令将文件复制到目的地:

    scp 路径/至/文件夹名称.zip 服务器:localhost:/路径/至/文件夹名称.zip

  3. 如果提示密码,请输入密码。

  4. 使用以下命令解压名为“文件夹名称.zip”的文件夹:

    unzip 文件夹名称.zip

这就完成了,在目标系统中现在有您的文件夹。顺便说一句,这是针对zip压缩的。

注意:如果您使用的是Mac OS,并且不想看到资源文件(例如_MACOSX),可以运行:

**zip -r -X name_of_folder.zip name_of_folder**

这意味着应该使用上述命令,而不是步骤1中的命令。


4

您需要遵循的简单步骤:

1)scp -r user@host:/var/www/html/projectFolder /var/www/html/localsystem-project-folder

2)scp -r user@host:/var/www/html/projectFolder/filename.php /var/www/html/localsystem-project-folder/

这里-r是为了递归遍历目录,可以帮助您避免任何错误。


1

你可以使用递归(-r)标志来复制文件。

get -r folderName

-1
以下命令对我有效: scp -ri -P 端口 源文件 目标路径

-1

它不起作用是因为你需要精确复制文件的名称; 所以使用这个命令像这样:

scp aa@aa:/home/pictures/file.fits ./file.fits

你也可以像这样重命名你的文件:

scp aa@aa:/home/pictures/file.fits ./newNameFile.fits

这是不正确的,目标可以是一个文件夹。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接