搜索此博客

2009年7月14日星期二

用 split 命令分割文件

今天看了个syslog,40M的gz,用vim愣是打不开。俺的内存是1G的啊。用gzip解开,640多MB。网上若干同仁(估计是互相抄的)都说用dd,1次只能拆一段,而且还得自己算偏移量。正常的方法应该用split命令。manpage我就不抄了,写几个例子。

  • split -l 10000 bigfile
  • split -b 10M bigfile
  • zcat bigfile.gz | splite -a 3 -d - BIG

文件名后面的是前缀,-a是后缀,-d表示序号按数字排,默认是字母。-l是按行数分割,-b是按字节数。

“ls *.tmp”是啥意思?

想列出目录里所有“.tmp”结尾的文件,很自然就会想到“ls *.tmp”,觉得ls就是干这个用的。到最近才忽然明白,这样做虽然能达到目(通常情况下),但实际并不是这么回事!

启发我的问题是这样的。当时目录里充满的垃圾文件,我用rm去删除,“rm *.tmp”,但是根本不起作用,shell提示说命令行超长了。bash的命令行最大长度是4096byte。当输入“rm *.tmp”时,bash会先进行通配符展开。把“*.tmp”展开,也就是把所有“.tmp”文件的文件名链接到“rm”后面。一旦文件有多,文件名又长,整个命令行就超标了,bash拒绝接受!

解决问题的方法:

  1. echo *.tmp | xargs rm
  2. find –name '*.tmp' –delete

要注意的是,“rm *.tmp”和“echo *.tmp | xargs rm”不会删除“.tmp”的子目录,删子目录需要“-r”,而find会删除子目录,除非加上“-type f”参数。

对于“echo *.tmp | xargs rm”,我还是有疑问的。难道echo *.tmp就不会有通配符展开的问题了吗?不知道,echo是bash内建的命令,而且反正echo也是把匹配的文件名写出来而已,也许真的不用展开。

好了,现在回到“ls *.tmp”的话题上来。和上面一样,命令执行时先通配符展开——好了,实际上我要做的事情并不是ls做的,而是bash,通配符展开的时候“.tmp”文件就已经被bash找出来了。最终执行的命令应该象是这样“ls 1.tmp 2.tmp 3.tmp … …”。

删日记了

删了不少日记,觉的自己写的太幼稚了。

Thinkpad X40 CPU电压/板载内存一览

Banias

型号 CPU电压 板载内存
11J ULV 256MB
13J ULV 256MB
15J ULV 256MB
1CJ ULV 256MB
1EE ULV 256MB
1EJ ULV 256MB
1EW ? ?
3EJ ULV 256MB
4VJ ULV 256MB
4WJ ULV 256MB
5FJ LV 256MB
5ZJ LV 256MB
67J LV 256MB
6EJ LV 256MB
71J ULV 512MB
7FJ LV 256MB
7FW ? ?
7VE ? ?
7VJ ? ?
7VW ? ?
A1I ULV 256MB
A3J ULV 256MB
A6J ULV 256MB
AEJ ULV 256MB
AFE ULV 256MB
AFJ ULV 256MB
AJ1 ? ?
BJ1 ULV 256MB
E8J ? ?
KJ1 ? ?

Dothan

型号 CPU电压 板载内存
11I ULV 256MB
12I ULV 256MB
13I ULV 256MB
14I ULV 256MB
15I ULV 256MB
16I ULV 256MB
17I ULV 256MB
21I ULV 256MB
22I ULV 256MB
23I ULV 256MB
24I ULV 256MB
25I ULV 256MB
26I ULV 256MB
27I ULV 256MB
A2I LV 512MB
B4J ULV 256MB
BBJ ULV 256MB
BRE ULV 256MB
BRJ ULV 256MB
BTJ ULV 256MB
G1J LV 512MB
GDE LV 512MB
GDJ LV 512MB
GGJ LV 512MB
K5J LV 512MB
K9J LV 512MB
KCE LV 512MB
KCJ LV 512MB
KFJ LV 512MB
M4J ULV 256MB
M5E ULV 256MB
M5J ULV 256MB
M7J ULV 256MB
MAJ ULV 256MB
Q2J LV 512MB
Q3E LV 512MB
Q3J LV 512MB
Q5J LV 512MB
Q6J LV 512MB

2009年5月22日星期五

WPS格式死了吗?

家里一直用WPS2007个人版,并且坚持保存成wps格式等待着有一天wps格式也能像doc一样的流行。最近升级到WPS2009,听所wps格式直接改扩展名为doc,Word就能打开。伤心了,WPS格式彻底死了,连金山自己都放弃了,直接存成Word格式了。

WPS,国产软件的一面旗帜啊!当年微软是怎么求着金山搞兼容来着?盗版软件不仅成就了微软,同时也毁灭了国内的计算机行业。国内没有盗版DOS/Windows,Linux的含义会不会变成“李-minix”?

隐约记得OOo3.0兼容WPS的,现在看来果然是我记错了!

是我弄错了,人家是有“中间层转换框架”的,似乎可以在M$ Word打开WPS时自动进行转换(?),http://www.wps.cn/knowledge/knowledgeshow/tid-21842649.htm。是在自己独有格式外面加了壳了吗?

Powered by ScribeFire.

2009年5月8日星期五

用vino远程共享桌面

如果用VNC server的话,会在远程服务器端新建一个Display,客户端连接接后开始一个新的Session。但是我想要的是把“调试机”当前的Session共享到“业务机”上。Gnome桌面是带这个功能的,叫做vino。但是“调试机”上是IceWM。

vino包含几个部分。vino-preferences、vino-session和/usr/lib/vino/vino-server。前两个不知道干啥用的,可能跟Gnome有关。我只是把/usr/lib/vino/vino-server在“调试机”上运行起来,就可以用vnc-iewer在“业务机”远程连接到“调试机”的当前本地Session(display:0)上了。


Powered by ScribeFire.

2009年5月1日星期五

Excel VBA写UTF-8文件

客户给的多语言式样是Excel的,最终要做成mo。mo是po编译出来的,po是UTF-8文本。
Private Sub WriteOut(str As String, strPath As String)
Dim objStream As Object

Set objStream = CreateObject("ADODB.Stream")
With objStream
.Type = 2 'adTypeText
.Charset = "UTF-8"
.Open

.WriteText str
.SaveToFile strPath, 2 'adSaveCreateOverWrite
End With

Set objStream = Nothing
End Sub

以上内容抄于网上,那个“ADODB.Stream”是什么我不是很清楚。我用“Set objStream = new ADODB.Stream”不好使。