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.fits
从aa@aa
、/home/pictures
复制到当前目录。我也试过不使用/home/
,但也没有用...
你明白怎么了吗?
【问题讨论】:
试试:scp aa@aa:~/pictures/file.fits .
可能路径错误,应该包含您的 Linux 用户名。 /home/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 给出“不是常规文件”的主要内容,如果未能解决你的问题,请参考以下文章