我在 Linux 服务器上有一个文件,我想将其移动(而不是复制)到我的本地计算机。但是,在从堆栈溢出读取命令后,我做了如下操作,但是它只是复制文件而不移动它。
scp -r obs@180.78.5.547:/home/obs/folder/test.txt /home/yuan/folder/
Run Code Online (Sandbox Code Playgroud)
任何帮助都受到高度赞赏。
pol*_*mon 21
“移动”本质上是复制然后删除源文件。
如果你想通过网络“移动”一个文件,你必须这样做。这总是更可取的,因为如果网络连接失败,您可以重试复制,而不会丢失任何数据(如果您的文件传输不正确,但随后被删除)。
传输文件后,您必须删除服务器上的源文件,例如:
ssh obs@180.78.5.547 'rm /home/obs/folder/test.txt'
Run Code Online (Sandbox Code Playgroud)
-r
您在示例中使用的选项是递归复制文件,这表明您希望通过网络复制文件目录。我想您想通过网络移动所有文件(传输然后删除该源目录中的所有文件)。
在两台机器之间复制或“移动”文件时,我建议使用rsync
. 它只会传输新的和更改过的文件,并跳过目的地已经存在的相同文件。它可以选择在传输源文件后一次性删除它们,这应该模仿您在将文件从一台机器“移动”到另一台机器时可能期望的行为:
rsync -aPEmivvz --remove-source-files obs@180.78.5.547:/home/obs/folder /home/yuan
Run Code Online (Sandbox Code Playgroud)
对于您将使用的仅一个文件:
rsync -aPEmivvz --remove-source-files obs@180.78.5.547:/home/obs/folder/file.txt /home/yuan/folder/
Run Code Online (Sandbox Code Playgroud)
使用该--remove-source-files
选项只是在文件传输后删除文件。
rsync
有一个--remove-source-files
选项。它删除所有同步的非目录文件。
这可能会起作用:
rsync -avz --remove-source-files obs@180.78.5.547:/home/obs/folder/test.txt /home/yuan/folder/
Run Code Online (Sandbox Code Playgroud)
注意 rsync 需要安装在源和目标机器上。
--dry-run
在运行之前尝试运行以确保它可以正常工作。
rsync
over的好处scp
是它可以复制文件权限、所有权、符号链接,使用压缩来加速慢速连接上的传输,并在删除之前执行哈希以验证传输是否成功。
我通常rsync
用于备份,它只会传输自上次同步以来发生更改的文件,从而节省大量时间和带宽。