用于连接嵌套在多个文件夹中的 zip 档案中的多个文本文件的脚本

用于连接嵌套在多个文件夹中的 zip 档案中的多个文本文件的脚本

我有 30 GB 的文本文件和 html 文件,它们来自各种来源,位于嵌套的文件夹层次结构中。所有这些文件夹都位于我的主目录中名为 zipFiles 的文件夹中。层次结构有 20 层深,有些分支比其他分支更深。我想将所有这些文件的文本连接到一个巨大的文本文件中,以用作 Spark 项目中的 RDD。显然,我需要通过删除 html 格式代码将 html 文件转换为文本。

我的方法是:遍历嵌套文件夹层次结构(不知道如何在 bash 中执行此操作)如果文件是 html,则解压缩它将其转换为文本将其添加到巨大的结果中

我发现的问题是内存不足——如果我只是将文本添加到代码中的变量中,在内存中完成所有操作。

如果我从磁盘打开巨大的文件,写入它并关闭文件,那么我就会破坏磁盘,并且它也会变慢。

Bash 脚本是我唯一的解决方案吗?因为它让我害怕。我想我可以用 Python 来做,但我还需要知道如何在 Python 中解压以及如何将 HTML 转换为文本。

答案1

find当你需要在目录中递归执行某些操作时,这是一个很好的工具。zcat 可以

我的方法是这样的:

find /home/username/zipFiles -type f -name "*.zip" -exec zcat {} \; > outputfile.txt

例子:

$ df > testfile.txt                                            
$ zip testArchive testfile.txt
  adding: testfile.txt (deflated 54%)
$ find . -maxdepth 1 -name "*.zip" -exec zcat {} \;            
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             1954212        4   1954208   1% /dev
tmpfs             393160     3392    389768   1% /run
/dev/sda1      115247656 82424300  26946008  76% /
none                   4        0         4   0% /sys/fs/cgroup
none                5120        0      5120   0% /run/lock
none             1965792       80   1965712   1% /run/shm
none              102400       32    102368   1% /run/user
cgmfs                100        0       100   0% /run/cgmanager/fs
/dev/sdb1       30343056       48  30343008   1% /media/xieerqi/SDCZ43-032G

相关内容