【问题标题】:scp gives "not a regular file"scp 给出“不是常规文件”
【发布时间】: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 递归复制并遵循符号链接并显示(详细)它正在复制的内容。

标签: linux scp


【解决方案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】:

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

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

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

        zip -r name_of_folder.zip name_of_folder

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

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

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

      4. 使用以下命令解压缩 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

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

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

            【讨论】:

            • 如果你还没有醒来并且你的源和目标倒置并且你试图将一个不存在的文件从你的目标复制到你的源...
            • 这意味着读取标准输入并写入标准输出,如sftp -b <(echo get file /dev/fd/1)
            • 我也面临符号链接的问题。
            猜你喜欢
            • 2015-07-29
            • 2015-01-25
            • 2011-12-20
            • 1970-01-01
            • 1970-01-01
            • 2015-04-17
            • 1970-01-01
            • 1970-01-01
            • 2011-02-27
            相关资源
            最近更新 更多