使用 scp 将文件从本地目录 X 传输到远程目录 Y

dra*_*mnl 135 scp

我查看了此处的其他问题以及 Internet 上的各种“scp 使用”教程,但我无法弄清楚出了什么问题。

我正在使用 Linux Mint 并试图弄清楚scp是如何工作的。

我在目录/home/name/dir/ 中有一个文件file.ext(在我的电脑上)

我使用ssh连接到远程机器,例如:

ssh -p 2222 username@domain
Run Code Online (Sandbox Code Playgroud)

它问我密码,shell 显示:

username@domain ~ $
Run Code Online (Sandbox Code Playgroud)

现在,如果我发出命令(在我运行 ssh 之前,我在本地目录 /home/name/dir 中):

scp -r -P 2222 file.ext username@domain 
Run Code Online (Sandbox Code Playgroud)

输出是:

cp: cannot stat ‘file.ext’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果我写的是完整路径而不是 file.ext,则结果相同

scp -r -P 2222 /home/name/dir/file.ext username@domain 
Run Code Online (Sandbox Code Playgroud)

此外,服务器管理员告诉我,我会将文件上传到我的远程主目录(而不是根目录),例如:

scp -r -P 2222 file.ext username@domain:~/
Run Code Online (Sandbox Code Playgroud)

但是当我这样做并按“Enter”时,什么也没有发生,就好像外壳正在等待进一步的输入一样。

我的问题总结:

  • cp: 没有那个文件或目录
  • 外壳“卡住”在 ~/

有什么建议?

ter*_*don 158

您需要scp从本地机器运行命令,而不是在远程机器上运行。你根本不需要ssh

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 
Run Code Online (Sandbox Code Playgroud)

你也不需要-r

 -r      Recursively copy entire directories.  
Run Code Online (Sandbox Code Playgroud)

如果您已经登录到远程机器并想从本地复制,您需要确保您的本地机器可通过互联网访问并已ssh设置。我不认为这就是你所追求的,但如果是,只需从远程运行:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。问题是我试图在 ssh 会话中运行 scp。现在它起作用了! (2认同)

小智 39

我提供了两种远程和本地机器之间上传/下载文件的方法(我使用Mac air):

在这种情况下,我想11.jpeg在本地和远程之间上下移动:

  1. 将服务上的文件复制到本地目录:您必须在本地 bash 终端中执行此命令,而不是在 ssh 中时!

    scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/   
    
    Run Code Online (Sandbox Code Playgroud)

    将本地目录中的文件复制到远程服务:您也必须在本地 bash 终端中

    scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
    
    Run Code Online (Sandbox Code Playgroud)
  2. SSH登录时要达到同样的目的,必须先设置“系统偏好设置>共享>远程登录>所有用户(我不确定是否必须为“所有用户”设置,但在这种情况下它有效)” Mac 会告诉您“要远程登录这台计算机,请键入:

    ssh username@xxxxxx, then type in the command below:
    scp username@domain:/home/xxx/xxx/11.jpeg username@xxxxxx:/Users/username/Desktop/**
    
    Run Code Online (Sandbox Code Playgroud)

上面这个命令是当你登录ssh时从远程下载文件到本地,当你想上传文件时,只需更改这两个路径即可。


小智 10

使用scp命令

如果你想一个文件夹刚刚转会,zip首先,我们可以unzip它以后。

在您的计算机上,运行以下命令:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/
Run Code Online (Sandbox Code Playgroud)

在这里,root是您的帐户,10.145.198.100是远程服务器的 IP 地址。我们将复制the_file~/遥控器中的文件夹。

解压文件:

$ unzip the_zip_file.zip -d destination_folder
Run Code Online (Sandbox Code Playgroud)


ale*_*xis 6

如果您在远程机器上运行此 scp 命令,它会寻找file.ext“本地”文件,即在远程机器上。

要将文件从远程机器复制到本地机器,请使用scp -P 2222 username@domain:dir/file.ext localdir(假设它file.ext~/dir远程计算机上,如您的示例中所示)。如果您scp在远程机器上运行,请颠倒“本地”和“远程”。