convmv – Linux下修改文件名编码

今天在公司tar打包一些编码为GBK的中文文件名的文件时打包碰到的问题。我自己的locale是en_US.UTF8,那台主机的环境是zh_CN.GBK,因此tar不管怎么打包,都会使文件名出现问题。而如果采用7z打包,虽然可以解决乱码问题(7z会记录下文件名的编码),但会丢失文件属性,所以不打算采用。

google了下发现可以通过convmv来进行解决:

convmv -f GBK -t UTF8 -r --notest target

其中-f是源编码,-t是目标编码,-r是递归处理目录,–notest是不移动,实际上对文件进行改名(actually do rename the files),target是目标目录。其余参数可以参考man或者-h。

另外一个方案是google到了一个python脚本,通过python的tarfile包解决问题,感兴趣的可以看看这个link: http://superuser.com/questions/60379/linux-zip-tgz-filenames-encoding-problem

DoubanFM-CLI

嗯……一直想在Linux下面搞个好使的豆瓣FM客户端好在工作时听听(不然要专门开个浏览器),于是google了下找到了这个,于是什么桌面客户端之类的弱爆了啊,这个才是Geeker听音乐的方式 = 。 =

东西是Python写的,代码短小精干,也可以自己研究下

github: https://github.com/zhendi/DoubanFM-CLI

作者豆瓣: http://www.douban.com/people/KaKa9527/

fbterm—支持freetype2字体库的帧缓冲终端控制台

http://code.google.com/p/fbterm/

继续来推荐Linux下面的software,这是最近发现的好物,fbterm,可以在帧缓冲的终端控制台下提供中文显示的支持,并且也能支持输入法,比起那个已经数年没有更新的zhcon好多了(zhcon也容易导致没有响应或有奇怪的问题)。更重要的是,它的字体显示是调用freetype2的,所以能和X下面的GUI应用达到相同的字体显示效果,看着文泉驿非常舒服~

Read the rest of this entry >>

wget使用ssh socks代理

在apt自动调用wget下载http://archive.canonical.com/上的一个二进制文件的时候遇到了一个问题,那就是速度太慢,然而wget又无法直接指定ssh通道建立的socks代理服务器,于是google来了这个方法解决了这个问题。
wget不支持socks代理而仅支持http/https/ftp代理,而有时候又只有ssh可以用,这时候这个两部即可完成的技巧就很管用:

  1. 用ssh的-L参数指定一个端口到目标服务器的SSH Tunnel
  2. 将wget的http代理设置为localhost的对应端口,并增加一个http header

实际操作,指定端口转发到目标服务器,并和ssh服务器建立连接:

ssh -L 8888:[要访问的服务器IP]:[服务器HTTP端口] [ssh服务器地址]

使用wget时则需要:

wget -header="Host: [要访问的服务器IP]:[服务器HTTP端口]" http://localhost:8888/[文件路径]

如果是apt那种应用环境自动调用的wget,则可以在/etc/wgetrc里面修改参数,加入

header = Host: [要访问的服务器IP]:[服务器HTTP端口]
http_proxy = http://localhost:8888/

Linux批量修改多个文件名

terminal

今天需要在服务器上用正则表达式来替换许多文件名中的某些字符。

于是google了”linux 批量改名”,发现rename这个工具可以满足需求,然而Google到的rename的中文说明发现它们所描述的内容已经不符合现在的版本而无法使用,所以研究了一下(也只是man rename罢了)记录下来:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

这其中:-v 如果指定,则在屏幕回显修改的文件名
-n 如果指定,则不对文件名实际修改仅显示修改结果(测试用)
-f 如果指定,则强制覆盖已有文件
perlexpr 一个Perl风格的正则表达式
files 文件名通配符

示例:

rename s/_/-/ *.jpg  #修改所有的包含_的.jpg文件中的_为-

控制台BT客户端——CTorrent

今天因为一些原因希望下载一个已经没啥种子的torrent,想到了借用VPS的力量(主要是高带宽优势和区域优势),所以在VPS先安装了一个官方bittorrent,结果装出来一堆命令真是让人眼花了,觉得没爱,继续google之后,决定尝试一下这个CTorrent,使用了一下觉得临时对付一下还是十分方便的~(在Ubuntu上,apt上的已经是CTorrent的修改版——Enhanced CTorrent)

命令范例:

ctorrent -s /temp -e 1 -C 32 -p 7777 test.torrent

其中-s参数指定存储路径,-e指定做种时间(单位小时),-C缓存容量(单位M),-p绑定端口,开启后会显示上传和下载的详细信息:

Listening on 0.0.0.0:7777
Press 'h' or '?' for help (display/control client options).
/ 25/75/1589 [618/1719/1719] 156MB,46MB | 226,54K/s | 224,16K E:0,1

另外还可以使用-d参数进入后台运行的模式(运用fork实现),-h查看帮助~

原作者自称为YuHong,看来是个中国人,支持一下!

Enhanced CTorrent

CTorrent官方网站(项目已经停止更新)

作者本人在FreeBSD China论坛的发布帖

某人写的一篇CTorrent源码解读

Linux批量替换多文件文本

将某目录中所有文件中的文本“abcde”替换成“vifix”:

1.sed+grep方案:

sed -i "s/abcde/vifix/g" `grep abcde -rl /home/test`

2.perl方案:

perl -p -i -e "s/abcde/vifix/g" *

update @2011-11-10:
3. sed+find方案:

find -iname "*.txt" -exec sed -i "s/from_string/to_string/g" {} \;

CMD批处理大量隐藏+系统+只读属性的文件夹

嘛,近来有病毒批量修改USB存储设备的文件夹属性,设置为”系统” + “隐藏” + “只读”,给使用带来巨大不便,消灭病毒后手动恢复这些属性也十分麻烦。
稍微研究了一下批处理的for的用法,写了这个批处理,遍历所有当前目录下的隐藏目录,并且取消”系统”/”隐藏”/”只读”的属性。

FOR /f "delims=" %%i IN ('dir /b /s /a:dh') DO (
 ECHO %%i
 ATTRIB -s -h -r "%%i"
)
PAUSE

把以上内容保存为.bat或者.cmd,在需要的目录下执行即可(一般是移动硬盘/U盘根目录)