( 一张壁纸,看过宫崎骏动漫的人应该知道,这个是:树精《幽灵公主》里面的) 感谢老K,帮我解决了这个难题。事情的起因是以前收集了N多本电子书EXE、CHM格式的都有,但是EXE的文件在Linux平台下面是不能直接运行的,当时还不知道wine,但是即便现在使用wine,有些EXE格式书还是不能正常打开的,当初想把系统切换到Linux,于是找到了一个反编译的工具,将各种EXE、CHM文件都反编译为纯txt格式,一本书一个目录,目录名是书的名字,下面有子目录,里面按照书的章节一个个独立的txt文本,想把这些分散的章节合并为一个txt文本,然后按照书的名字给合并后txt重新命名,并且存放在一个新的文件夹下,这样阅读、管理起来会很方便。当初为了这个还折腾过几天的C语言,瞎折腾了,前一阵子和老K大哥扯到了这个,求他帮忙弄个脚本,午饭后他用了不到一袋烟的功夫就实现了,晚上运行的时候489个文件夹400多兆的数据眨眼的功夫就跑完了,相当快,有需要的可以参考下面的代码,保存为sh,放到需要执行的目录下双击即可,需要注意的是: 1 所有目录,子目录,文件名是中文没关系,但是不能有空格和那些特殊字符,比如/阿,=阿什么的。 2 书目录下可以有章节子目录,但是要么没目录,全TXT,要么都是子目录包括TXT,不能2者同时有,否则结果不正确。
#!/bin/bash rootDir=`pwd` bookFile=""
for bookDir in $rootDir/* do if [ -d "$bookDir" ];then echo ">>> processing Book: $bookDir....." tmpName="$(basename "$bookDir").txt" touch "$tmpName" bookFile="$rootDir/$tmpName"
#check if there is sub-dir (chapters) ls "$bookDir" -l | grep "^d" &>/dev/null if [ $? -ne 0 ];then echo "INFO: No sub-directories found, processing txt files" find "$bookDir" -name "*.txt" | sort | xargs cat >> "$bookFile" else for chapterDir in "$bookDir"/* do if [ -d "$chapterDir" ];then echo ">>> processing chapter: $chapterDir" find $chapterDir -name "*.txt" | sort | xargs cat >> "$bookFile" fi done fi echo ">>> $bookDir processing finished!" echo "" echo "" fi done
如果文档编码是GB需要转化为UTF8才能正常显示,否则就是乱码了,用下面的这个命令即(可来自ubuntu)它会将src目录下的所有文件内容由GBK到UTF8:
find src -type d -exec mkdir -p utf8/{} \; find src -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \; mv utf8/* src rm -fr utf8 |
--
Best Regards
ouyangzi
0 comments:
Post a Comment