求教:如果快速复制和压缩10万甚至百万级的小文件?

手上有一批文件非常细碎,目前数量在50W个左右,我已经分成了5个文件夹,每个文件夹十万个文件。但我发现要转移到另一台设备上依然很费劲。
目前想到的方法:

  • 1 压缩软件?但我不知道哪个压缩软件面对这种情况适合,文件是json格式的。试用了360压缩感觉太慢太慢。
  • 2 用fastcopy可以不?或者用有没有靠谱的Robocopy的GUI工具?因为估计后面要用很多次,懒得每次都写命令行,不晓得后面的 /NS /NC /NFL /NDL /NP这几个参数对复制文件本身有没有啥影响

传到网盘上,在另一边下载下来

虚拟磁盘解君愁。windows就直接vhdx就好了。

1 个赞

额,你这个思路只适用于那些卖资源的,卖电影什么的,我这个不是

这个好像有点专业,但这似乎是用来迁移系统的?

你可以理解成高级点的文件夹。挂载上是一个硬盘,不挂载的时候就是个文件。无论里面装了多少小文件。你复制到别处也只要复制这个文件就行。

在其他地方挂载上又可以直接浏览。

1 个赞

不知道大小如何。如果不在意空间,可以空间换时间,任何一个压缩软件的“仅存储”就行

2 个赞

顺便补下之前在某个帖子里没有做的性能测试。

这里的C盘是原始磁盘,L盘是存放在C盘的虚拟磁盘。可以看到虚拟磁盘确实会存在一定的性能损耗。但是比起它带来的便利,这一点我感受不到的性能差距是完全可以接受的。

2 个赞

虚拟硬盘的创建和使用方法如下:

文章介绍得很详细,虽然是以 Windows Server 系统为例介绍的,但 Win10、11 上的相关操作是一样的。

3 个赞

腾讯的 COS 可以云端打包: 对象存储 配置多文件打包压缩任务-控制台指南-文档中心-腾讯云

使用目录或清单的打包方式,最多支持打包1000万个文件,总大小不超过50TB。
费用: 多文件打包压缩 0.05元/GB

看你的描述场景好像是同一个设备下的?我是要转到另一台电脑上,不过非常感谢,目前我用7zip的7z格式发现非常快,360zip平时看不出来,关键时刻咋这么拉胯

不是。虚拟磁盘文件可以像压缩包一样随意的在设备间复制。之于压缩包的优点就是不用解压就可以随时编辑、删除或者添加文件。

2 个赞

可以把移动硬盘的一部分做成虚拟硬盘嘛?我刚刚发现7zip的压缩速度瓶颈似乎在十万,超出了就也挺慢的

当然可以,你完全可以当作文件夹来操作。你可以跟着上面的vhdx教程试一下。还是比较简单的。

小文件传输之所以慢是因为每个文件都要重复打开、读取,再重复在远程服务器上打开,写入。来来回回速度太慢了。

解决办法:

  1. 如果这些文件在单独的硬盘了,直接把硬盘分区传输到另一台电脑去说不定更快。
  2. 使用压缩文件预先打包一下。比如 tar, 7zip, rar, zip 都可以,压缩算法选无压缩,速度非常快。
  3. 前面帖子说的使用虚拟磁盘,本质上与压缩包差不多。

本身都是小文件,总容量应该不大吧?如果传输文件本身非常慢,那可以考虑一般发送一边压缩。反正无所谓压缩时间。我们搞服务端的一般会用 tar, gzip/bzip2, ssh 这几条命令组合一下:

tar -czf - my_directory | ssh username@remote_ip "tar -xzvf - -C /path/to/destination"

你可以安装一个 cygwin 或者 wsl1 就有这些命令了。win10 现在自带 ssh 命令,但是没带 tar 命令。

如果是细碎的文件, 不压缩的打包, 会比较快.

360压缩用的是7zip的源码. 一般来说, 只要不压缩,都不会太慢.

工具的话, fastcopy 会比较快.

GHOST
就是以前盗版系统常用那个 :joy:

2 个赞

DwarFS - 跨平台、快速、高压缩比文件镜像系统:非常适合压缩打包海量小文件

50万肯定要花点时间。两个思路,大概几个方法:

  1. 格式简单的话可以用Clickhouse转个格式。
  2. 用S3服务传。18万小JSON用python 1小时内就搞完了。
  3. 压缩也可以。看另一台设备在哪里。

这种迁移通常的打包,而且使用压缩软件的目的也主要是打包,使用RAR,然后压缩模式选择“存储”即可!