我需要将文件从 Linux 机器复制到 Windows 机器,其中唯一可以打开的端口是 SSH (22)。
我可以使用 WinSCP 连接到 Linux 机器,但问题是一旦我尝试导航到所需的文件夹,WinSCP 就会卡住,因为该文件夹包含数百万条记录。
基本上我并不关心我复制哪些文件,我很高兴找到一个解决方案,使我能够只复制最新的 200 个文件。
有任何想法吗?
我尝试过使用ls -f | less
,但这并没有达到目的。
答案1
如果您可以放弃WinSCP要求并愿意使用西格文相反,这两条线就可以解决问题:
$ ssh linuxbox 'ls -t1 /path/to/files | head -200' > files.list
$ rsync -ave ssh --files-from=files.list linuxbox:/path/to/files local/dest
这将在 WinSCP 不起作用的情况下起作用,因为它不尝试构建数百万个文件的 GUI 图像。它只是从远程设备请求 200 个最近接触过的文件的列表,然后按名称将它们传输到本地计算机。
rsync
并且ssh
不在默认的 Cygwin 安装中。当您进入软件包选择屏幕时,请务必选择它们Cygwin 安装程序。
答案2
只是为了确保我正确理解你的问题:
你只能坐在 Windows 机器前,而不能坐在 Linux 机器前,对吧?
虽然我不熟悉 WinSCP 的特性,但应该可以在 WinSCP 设置中的某处指定其他 SCP/SSH 选项。
我想,为了列出目录中包含的文件,WinSCP 首先通过连接ssh
,然后用ls
.
确保ssh
连接使用压缩。这可以通过ssh
参数来完成-C
:ssh -C
在大多数情况下,这会显着减少要传输的体积,并在过去为我省去了很多麻烦。
不幸的是,启用 SCP 压缩有点棘手。scp
已获得参数-o
,该参数定义了key value
由 定义的一对选项ssh_config
。
在您的情况下,您可以使用Compression yes
默认值no
。
然而,压缩减少了带宽,但增加了双方(主机和客户端)处理器的负载。如果您要传输的数百万个文件是未压缩的纯文本文件,我会尝试 SCP 压缩。它们是二进制文件还是已经压缩的档案,我不会使用 SCP 压缩。
答案3
当传输大量文件时,我会考虑使用tar
或其他一些归档工具在 UNIX 端创建一个大文件(也可以压缩),然后传输该较大的文件而不是许多较小的文件。
我对 Windows 不太熟悉,不知道有哪些归档软件可用(zip
?)。