我的 Ubuntu 服务器上有一个目录,其中包含许多子目录和文件。我想下载整个文件夹,因此我使用了以下命令:
scp -r [email protected]:/path/to/target_directory /path/to/local_directory
因此 target_directory 最终位于 /path/to/local_directory/target_directory。到目前为止,一切正常。
问题:target_directory 不是很大(大约 50MB),但有很多小文件。scp
一个接一个地下载文件,这太耗时了。所以我在想也许有一种方法可以压缩目录并下载它(可选,不将压缩文件保留在服务器上)。我认为这是可以实现的,但不确定如何实现。
笔记:我使用 Mac 作为我的本地机器。
答案1
感谢@muru 的回答和解释。我发布此信息是为了提醒自己和其他可能需要此信息的人。
rsync
真的很快!具体操作如下rsync
:
rsync -azP [email protected]:/path/to/target_directory/ /path/to/local_directory
-a
将(递归地)复制所有内容-z
将压缩文件,-P
将显示每个文件的进度条
rsync
允许您在发生中断或网络故障时只需运行相同的命令即可恢复下载。
笔记:源/
最右边的/path/to/target_directory/
表示它将复制内容target_directory(而非目录本身)。如果您想要复制目录本身,请删除此尾部斜杠。
答案2
如果问题是有很多小文件,您实际上并不需要压缩。使用tar
在 Ubuntu 上创建存档,而不是将存档保存到文件,而是将其发送到 stdout(当没有指定文件时,Ubuntu 的 GNU tar 的默认设置)并tar
在另一端读取文件:
ssh ubuntu-server tar c -C /path/to/target_directory . | tar xvf - -C /path/to/local_directory
或者使用类似更智能的工具rsync
。