将文件从服务器移动(而不是复制)到本地计算机

tit*_*u d 4 shell bash scp

我在 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选项只是在文件传输后删除文件。

  • 它能为您提供帮助吗?所以点击✓ (6认同)

Ste*_*art 8

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在运行之前尝试运行以确保它可以正常工作。

rsyncover的好处scp是它可以复制文件权限、所有权、符号链接,使用压缩来加速慢速连接上的传输,并在删除之前执行哈希以验证传输是否成功。

我通常rsync用于备份,它只会传输自上次同步以来发生更改的文件,从而节省大量时间和带宽。