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

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

我在 Linux 服务器上有一个文件,我想将其移动(而不是复制)到我的本地计算机。但是,在从堆栈溢出读取命令后,我做了如下所示的操作,但它只是复制文件而不移动它。

scp -r [email protected]:/home/obs/folder/test.txt       /home/yuan/folder/

非常感谢任何帮助。

答案1

“移动”本质上是复制然后删除源文件。

如果你想“移动”网络上的文件,您必须这样做。这总是更好的选择,因为如果网络连接失败,您可以重试复制,而不会丢失任何数据(如果您的文件传输不正确,但随后被删除)。

文件传输后,您必须删除服务器上的源文件,例如:

ssh [email protected] 'rm /home/obs/folder/test.txt'

您在示例中使用的选项-r用于递归复制文件,这表明您希望通过网络复制文件目录。我想你想移动网络上的所有文件(传输然后删除该源目录中的所有文件)。

复印或“移动”两台机器之间的文件,我建议使用rsync。它只会传输新的和更改的文件,并跳过目的地已有的相同文件。它有一个选项可以在源文件传输后一次性删除它们,这应该模仿您在传输时可能期望的行为“移动”从一台机器到另一台机器的文件:

rsync -aPEmivvz --remove-source-files [email protected]:/home/obs/folder /home/yuan

对于一个文件,您可以使用:

rsync -aPEmivvz --remove-source-files [email protected]:/home/obs/folder/file.txt /home/yuan/folder/

使用该--remove-source-files选项只需在文件传输后将其删除。

答案2

rsync有一个--remove-source-files选择。它删除所有同步的非 dir 文件。

这可能会起作用:

rsync -avz --remove-source-files [email protected]:/home/obs/folder/test.txt /home/yuan/folder/

注意 rsync 需要安装在源机器和目标机器上。

在运行之前尝试运行以--dry-run确保它有效。

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

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

答案3

scp不会从服务器中删除任何内容,成功rm后您可以在服务器上运行:scp

scp -r [email protected]:/home/obs/folder/test.txt /home/yuan/folder/ \
  && ssh [email protected] 'rm /home/obs/folder/test.txt'

答案4

没有勺子。

尽管“move”这个词在英语中的意思是“移动”。这不是它在计算机中的作用。创建 mv 命令只是为了改善人类对物理对象的固定。

改个名字,更贴切一些。这就是 rename 和 mv 可以互换的原因。将文件从同一文件系统上的一个目录移动到另一个目录只需使用包含新路径的新全名“重命名”该文件。

将文件想象成一张纸上简单的两列垂直列表。路径位于左侧,文件内容位于右侧。

“移动”只是擦除左列并写入新值。文件的内容没有“去”任何地方。文件系统是这些页面所在的活页夹。

当您认为要将文件从一个文件系统或另一个文件系统(包括从一台计算机移动到另一台计算机)时你不。您所做的是将其从一个复制到另一个,然后在第一个上“擦除”它。 (当然这也没有真正删除它,只是遗忘它。)

移动的不是文件。 这只是你自己。

相关内容