web-dev-qa-db-ja.com

複数のフォルダーにネストされたZipアーカイブで見つかった複数のテキストファイルを連結するスクリプト

ネストされたフォルダー階層に配置されたさまざまなソースからの30ギガのテキストファイルとhtmlファイルがあります。これらすべてのフォルダーは、zipFilesという名前のフォルダーの私のホームディレクトリにあります。階層は20レベルで、一部のブランチは他のブランチよりも深いです。 SparkプロジェクトでRDDとして使用するために、これらすべてのファイルのテキストを1つの巨大なテキストファイルに連結します。明らかに、htmlを削除してhtmlファイルをテキストに変換する必要がありますコードもフォーマットします。

私のアプローチは次のとおりです:ネストされたフォルダ階層を反復処理します(bashでこれを行う方法がわかりません)htmlの場合はファイルを解凍し、テキストに変換して巨大な結果に追加します

コードで変数にテキストを追加するだけでメモリ内ですべてを実行すると、これで発生する問題はRAMが不足しています。

ディスクから巨大なファイルを開いて書き込み、ファイルを閉じると、ディスクをスラッシングしているので、ゆっくりと進みます。

それが私を怖がらせるので、bashスクリプトは私の唯一のソリューションです。私はpythonでそれを行うことができたと思いますが、その後、pythonで解凍し、htmlからテキストへの変換も行う方法を知る必要があります。

2
aquagremlin

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
2