Linux中的文件转换

 上次在《Linux下的几个操作中,记录备忘》中,转载了网友的方法,写一个脚本cc.sh来解决iconv不能主动识别现有文件编码的问题。

但每次要用时都把cc.sh代码复制下来,也不方便。

搜索了一下,有个更好的工具叫做enca,可以自己识别源文件的编码,如果编码已经相同了,就不转换,也不会象iconv一样报错。可我试用了一下,有问题,估计作者没在中文下仔细测试,我的GB2312文件中的"不"变成"上","名"变成"吊",添乱啊!作者从2005年1.9发布至今,就不曾更新过。

无奈,自己想办法,双管齐下。enca负责识别文件编码,iconv负责转换,gawk架座桥梁。

 

当前目录下的php文件,比如a.php是UTF-8编码的,复制一份为a.php.u,其他的编码的文件,则转换编码为UTF-8,另为a.php.u。

现在,如果源文件不需要了,删掉吧,并且把转换好编码的文件去掉最后的.u,就像下面这样做:

 

enca -i *.php | gawk -F ": " '{print $2~/^UTF-8/ ? "cp "$1" "$1".u" : "iconv -f "$2" -t UTF-8 "$1" > "$1".u"}' | sh
rm *.php
rename .php.u .php *.php

 enca总是猜错,还是用Linux系统自带的file --mime-encoding 命令吧

MySQL数据库备份脚本

这是一个MySQL数据库备份的Bash脚本,就是代替手工输入命令。并不是自动备份,如果你不把它做成定时任务。 #!/bin/bash DBUSER=root DBPASS=toor DBNAME=testdb DATE=`date %Y%m%d-%H%M` mysqldump -u $DBUSER -p$DBPASS --default-character-set=utf8 $DBNAME > db.$DBNAME-$DATE.sql echo 'MySQL backup is finish!' 如果需要压缩备份文件,这是很必要的,备份文件很耗空间。追加以下部分到脚本。 tar cjvf db.$DBNAME-$DATE.tar.bz2 db.$DBNAME-$DATE.sql rm db.$DBNAME-$DATE.sql echo 'Tar compress is finish!'

Google开放注册GAE

4月中旬,Google开放注册Google App Engine时,我没有赶上(才10K个名额)。今天看 [url=http://www.williamlong.info/archives/1357.html]月光博客[/url] 说Google把GAE放开了,就赶紧注册了一个,谁叫我对Python这么熟呢![emot]grin[/emot] 注册时得填手机号码接收验证码,我填了一个,发现验证码是腾讯发出的。 手机号码要带国际区号,格式类似下面 86 135******** 你的GAE网址是 http://****.appspot.com 不上传程序,什么都不会有,Google也没有提供默认首页

Awk的用法

没有去系统的看Awk的文档,到要用的时候才知道那一点皮毛远远不够,赶紧恶补。 [quote]变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止记录数 OFS 输出域分隔符 ORS 输出记录分隔符[/quote] 大家到这里看完整的吧 [url=http://www.xiaojb.com/archives/it/awk.shtml]awk用法小结[/url] 更详细的教程 [url=http://unix-cd.com/unixcd12/article_5817.html] Awk 实例(一)[/url] 以后我再贴个自己的例子上来。

无耻的迅雷

今天看了师兄刀刀的一篇博客 [url=http://www.foolpig.com/2008/05/19/impudicity-thunder/]《无耻的迅雷》[/url]。马上打开自己电脑 C:\Windows\system32\ 目录,果然有cid_store.dat文件。用记事本打开,虽说有一小半是乱码(二进制),但大部分都是字符串,正是我之前用迅雷下载的文件在本机存放的路径。二话不说,先删掉这个文件。 早几年就听说迅雷爱盗链,引起国内软件下载站的极大不满,有的网站就拒绝用户使用迅雷下载。没想到它到处做手脚,连个人电脑也要侵占,你愿意自己的电脑让别人作主吗!

好书《程序设计实践 双语版》

今天在南山书城发现一本好书《程序设计实践 双语版》,作者是Brian W.Kernighan和Rob Pike,由裘宗燕翻译。 在CSDN上找到这本书,可以在线阅读两个章节,其实全书总共才六章左右。 [url=http://book.csdn.net/bookfiles/549/]在线阅读《程序设计实践 双语版》[/url] 我在书城仔细把3.1、3.2读了一遍,关于马尔可夫链算法的内容。

简单的代码易于调试

今天看一篇英文博客 [url=http://porteightyeight.com/archives/151-9-PHP-Debugging-Techniques-You-Should-Be-Using.html]9 PHP Debugging Techniques You Should Be Using[/url] ——《你应当会用的九种PHP调试技术》。在最后一条,也提到了简单的代码一般更健壮。对于PHP,写简单代码的方法是: [quote]Keep Things Simple: 1. [b]Keep an eye on functions that are growing[/b]. You may find that you can split the code into several smaller functions. 2. [b]Functions that are only called in one place may be too specific[/b]. You can either bring the ...

根据机器有选择地加载配置文件(Python)

同样的选择加载配置文件的问题,在Python下如何解决? [quote]假设我们有三台机器:办公用的机器装Windows;局域网的测试机是Linux,机器名local-test;互联网上的服务器也是Linux。对应三个配置文件settings_win.py、settings_test.py、settings_remote.py。[/quote] 使用Python的os.environ。注意Windows下os.environ没有'HOSTNAME'。 import os if "Windows_NT" == os.environ.get("OS",""): from settings_win import * elif "local-test" == os.environ.get("HOSTNAME",""): from settings_test import * else: from settings_remote import *

PHP中$_SERVER的详细用法

这里有关于 [url=http://blog.chinaunix.net/u/21041/showart_338744.html]PHP中$_SERVER的详细用法[/url] 我把它用作由机器名调用相应的配置文件。 假设我们有三台机器:办公用的机器装Windows;局域网的测试机是Linux,机器名local-test;互联网上的服务器也是Linux。对应三个配置文件config.win.php、config.test.php、config.remote.php。 在导入配置文件时,这样写(第一个分支未测试): if('localhost' == $_SERVER['SERVER_NAME']) require_once('config.win.php'); else if('local-test' == $_SERVER['SERVER_NAME']) require_once('config.test.php'); else require_once('config.remote.php'); 全文引用 《PHP中$_SERVER的详细用法》 [quote]$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关。 $_SERVER['argv'] #传递给该脚本的参数。 $_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。 $_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。 $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。 $_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。 $_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。 $_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。 $_SERVER['QUERY_STRING'] #查询(query)的字符串。 $_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。 $_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。 $_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。 $_SERVER['HTTP_ACCEPT_ENCODING'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。 $_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。 $_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。 $_SERVER['HTTP_HOST'] #当前请求的 Host: ...

代码设计的探索

看到一篇让人很有启发的文章,给个链接 [url=http://www.i170.com/article/21433]代码设计的探索[/url] 我最喜欢里面的这句话 [quote]如果你拥有的唯一工具就是一把锤子,不要把整个世界都当作一个钉子。[/quote]