scp 给出“不是常规文件”

Posted

技术标签:

【中文标题】scp 给出“不是常规文件”【英文标题】:scp gives "not a regular file" 【发布时间】:2015-06-15 07:49:12 【问题描述】:

我在 Linux 上使用 scp 时遇到问题,它说“不是常规文件”。我查看了有关此的其他问题/答案,但我无法找出问题所在... 我写道:

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

file.fitsaa@aa/home/pictures复制到当前目录。我也试过不使用/home/,但也没有用...

你明白怎么了吗?

【问题讨论】:

试试:scp aa@aa:~/pictures/file.fits . 可能路径错误,应该包含您的 Linux 用户名。 /home//图片可能吗? 在这种情况下,Tilda 将是你最好的朋友 :)。在这种情况下,不要扩展您的目录路径。现在我正在考虑它,你的命令无论如何都不会起作用。如果要添加整个目录,它看起来像:scp aa@aa:/home/aa/pictures/file.fits . 使用 ssh (ssh aa@aa) 登录并发出命令:file /home/pictures/file.fits 并告诉我们上面的内容。 只需切换到rsync 即可节省您的时间和精力。使用rsync -azHvu aa@aa:/home/pictures/file.fits .。这将允许 rsync 递归复制并遵循符号链接并显示(详细)它正在复制的内容。 【参考方案1】:

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

get -r folderName

【讨论】:

【参考方案2】:

通过教很多人的基本系统管理员,我必须说在 90% 的情况下,这是因为他们试图复制目录而不通过 -r source

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

scp -r root@IP:/path/ /path/on/local_pc

【讨论】:

【参考方案3】:

如果您尝试传输整个目录,请使用 --recurse 标志。不是 -r。它不起作用。

例如:- scp --recurse ...

【讨论】:

我很抱歉 Archulan,但这不是真的:请转到 linux.die.net/man/1/scp 只需 Ctrl+F '-r' 那里。链接中的文档的日期为 2013 年 4 月 14 日,而我的本地手册页从 2019 年 11 月 30 日至今具有相同的描述含义【参考方案4】:

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

如果是这种情况,这就是你想要做的:

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

    zip -r name_of_folder.zip name_of_folder

    然后正常使用scp命令将文件复制到你的目的地:

    scp path/to/name_of_folder.zip server:localhost:/path/to/name_of_folder.zip

    如果提示您输入密码,请输入您的密码。

    使用以下命令解压缩 name_of_folder.zip:

    解压缩 name_of_folder.zip

就是这样,您现在在目标系统中拥有您的文件夹。顺便说一句,这是用于 zip 压缩的。

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

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

意思是上面的命令应该代替上面第1步中的命令。

【讨论】:

【参考方案5】:

您需要遵循的简单步骤

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 是递归遍历,导演会帮助你没有任何错误。

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

这是不正确的,目的地可以是文件夹。【参考方案7】:

可能发生此错误的一种方式是,如果您在第一条路径之前有一个空格,如下所示:

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

要修复,只需取出空间:

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

【讨论】:

【参考方案8】:

"/home/pictures/file.fits" 必须在远程服务器上命名一个实际的文件系统对象。如果没有,scp 会给出不同的错误消息。

我看到 FITS 是 an image format。我想“/home/pictures/file.fits”是远程服务器上一个目录的名称,包含 FITS 文件或类似的东西。

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

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

【讨论】:

这真的帮了我To copy a directory with scp, you have to supply the "-r" flag【参考方案9】:

我刚刚对此进行了测试,发现至少有 3 种情况 scp 会返回 not a regular file

    文件实际上是一个目录 文件是命名管道(又名 FIFO) 文件是设备文件

第 1 种情况似乎最有可能。如果您打算使用scp 传输整个目录结构,请使用-r 选项来指示递归复制。

【讨论】:

如果你还没有醒来并且你的源和目标倒置并且你试图将一个不存在的文件从你的目标复制到你的源... 这意味着读取标准输入并写入标准输出,如sftp -b <(echo get file /dev/fd/1) 我也面临符号链接的问题。

以上是关于scp 给出“不是常规文件”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用scp在Linux服务器的后台传输文件?

scp 使用方法

linux网络测试:scp/nc

scp命令远程与本地互相复制

Linux.Centos安装scp反复失败的解决方式

SCP 进度条,如 bash 脚本中的 WGET