我想您有一台 Linux 笔记本电脑或台式机,您的 hugearchive.tgz 文件位于某个 本地 磁盘上(不是远程网络文件系统,这可能太慢了)。如果可能,将 hugearchive.tgz 文件放在一些快速磁盘(最好是 SSD,而不是磁旋转硬盘)和快速的 Linux 原生文件系统(Ext4、XFS、BTRFS,而不是 FAT32 或 NTFS)上。
请注意,.tgz 文件是 .tar 文件的 gnu 压缩压缩文件。
下次你得到一个巨大的存档时,考虑以afio存档格式询问它,这具有单独压缩不太小的文件的巨大优势(或者可能要求一些SQL转储 - 例如PostGreSQL或Sqlite 或 MariaDB - 压缩形式)。
首先,您应该列出hugearchive.tgz gziped tar 存档中的文件名,并询问总字节数:
tar -tzv --totals -f hugearchive.tgz > /tmp/hugearchive-list.txt
该命令将运行gunzip 以将.tgz 文件解压缩到某个管道(因此不会占用大量磁盘空间)并将目录写入/tmp/hugearchive-list.txt,然后您将继续你的 stderr 类似
Total bytes read: 340048000 (331MiB, 169MiB/s)
当然这些数字是虚构的,你会得到更大的数字。但是您会知道档案的总累积大小是多少,并且您会知道它的目录。使用wc -l /tmp/hugearchive-list.txt 获取该目录中的行数,即存档中的文件数,除非某些文件被奇怪和恶意命名(例如,文件名中有一些换行符,这可能但很奇怪)。
我的猜测是您将在不到一小时的时间内处理您的庞大档案。详细信息取决于计算机,尤其是硬件(如果您负担得起,请使用一些 SSD,并获得至少 8GB 的 RAM)。
然后您可以决定是否能够提取所有文件,因为您知道它们需要多少总大小。由于您在/tmp/hugearchive-list.txt 中拥有目录,因此您可以在需要时轻松提取有用的文件。
为了它的价值,在我的 i3770K 台式机上,配备 16Gb RAM 和 SSD 和磁盘存储,我制作(用于试验)一个无用的巨大存档(专门为回答这个问题而制作,因为 我不'没有你的hugearchive.tgz 文件 ....) 和
sudo time tar czf /tmp/hugefile.tgz /bin /usr/bin /usr/local/bin /var
并且花费了这段时间来创建该存档(所有这些文件系统都在 SSD 上):
719.63s user 60.44s system 102% cpu 12:40.87 total
生成的/tmp/hugefile.tgz 有5.4 GB(注意它可能位于page cache 中)。
然后我尝试了:
time tar -tzv --totals -f /tmp/hugefile.tgz > /tmp/hugefile-list.txt
得到:
Total bytes read: 116505825280 (109GiB, 277MiB/s)
tar -tzv --totals -f /tmp/hugefile.tgz > /tmp/hugefile-list.txt
395.77s user 26.06s system 104% cpu 6:42.43 total
生成的/tmp/hugefile-list.txt 有 2.3Mbytes(对于 23K 文件),没什么大不了的。
如果您的 tar 存档不是 GNU zipped,请不要在您的 tar 命令中使用 z。
阅读 tar(1) 的文档(如果您使用它,还阅读 time(1) 的文档,更一般地阅读您正在使用的每个命令!)当然也使用命令行(不是一些GUI界面),还有learn一些shell脚本。
顺便说一句,您以后可以隔离非常小的文件(小于 64 KB),例如将它们放入某个数据库(可能是一些 Sqlite 或 Redis 或 PostGreSQL 或 MongoDB 数据库,填充例如一个小脚本)或者一些 GDBM 索引文件。请注意,大多数文件系统在处理大量小文件时都会产生一些显着的开销。
学习 shell 脚本和一些脚本语言(Python、Lua、Guile、Ocaml、Common Lisp)和基本的数据库技术不是浪费时间。如果例如您正在开始攻读博士学位,这几乎是必需的技能。
我不知道也不使用(也不喜欢)Windows,所以我显然有偏见(我的第一个 Linux 是一些 Slackware,大约在 1993 年或 1994 年初使用 0.99.12 内核),但我强烈建议你在 Linux 上完成所有 NLP 工作(并让 Windows 仅用于玩视频游戏,当你有时间的时候),因为在 Linux 上编写脚本和组合许多有用的现有 free software 要容易得多。