我有一个远程 Debian 测试服务器,通过 SSH(Putty 客户端)连接到该服务器。我想将远程计算机上的大量文件移动到另一个文件夹:
remote: /mnt/a/ -> remote: /mnt/b/c/
RESULT@remote: /mnt/b/c/a/
我使用 move (mv) 命令通过 SSH 从本地计算机连接到远程计算机:
mv /mnt/a/ /mnt/b/c/
我使用了大约 700 MB 的数据(大约 5 个文件)来完成此操作,并且复制这些文件花了很长时间。
mv 命令是否通过 SSH 将文件传输到本地计算机,然后将其发送回服务器上的另一个文件夹?如果是这样,是否有任何其他命令可以用来仅在远程服务器上本地移动文件?
答案1
只要您的源路径和目标路径位于同一文件系统上,mv
实际上就不会“移动”任何内容。它只会编辑目录和文件的元数据(索引节点和链接),但数据块本身不会移动。例如,假设/home
和/srv
位于不同的文件系统上,您将观察到以下情况:
$ mv /home/bigfile.txt /home/mydir/ # Instant.
$ mv /home/bigfile.txt /srv # Takes time.
如果您要将所有数据从一个文件系统移动到另一个文件系统,那么必须将其从一个磁盘部分物理复制到另一个文件系统:需要移动数据块,这可能需要时间(老实说,您不能对此做很多事情)。
通过 SSH 执行此操作不会改变任何事情。 SSH 代表 Secure Shell,这意味着您将获得一个实际的远程 shell,而不仅仅是将您的计算机用作所有内容的中继。无论您通过 SSH 从远程计算机请求什么,都会被远程处理。
答案2
为了使通过 SSH 会话移动文件更加稳健,我强烈建议您使用 screen(或 tmux 或类似的东西)。否则,您的 SSH 会话将面临被中断的风险(网络故障、本地系统电源故障、意外关闭 PuTTY 窗口、Windows 进入待机/休眠状态等)。如果您的 SSH 会话被终止,那么您的移动操作将被中断(未完成 - 最好的情况)或数据丢失/损坏(最坏的情况)。
在我看来,当移动大量数据时,rsync 是一个更好的选择。首先,因为您可以轻松地将其设置为显示进度(这样您就知道它没有停止,等等)。其次,因为如果它被中断,它可以重新启动,而不必重做已经成功完成的事情......