LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1245|回复: 8

砖头:把 UTF-8 文件复制到 GB18030 文件

[复制链接]
发表于 2006-8-27 16:05:36 | 显示全部楼层 |阅读模式
扔块砖头,有兴趣的试一试。
把UTF-8文件名 转换成 GB18030文件名的一个 bash 脚本:

  1. #!/bin/bash
  2. # Convert filename from UTF-8 to GB18030.
  3. # License: GPL 2.0 and/or later.
  4. # Version: 0.0.4
  5. # Date   : 2006-09-18
  6. # Contact: linux_now AT bbs of linuxsir
  7. # Name   : cp_utf2gb.sh
  8. # Usage  : cp_utf2gb.sh file/dir dir

  9. [ $# -lt 2 ] && echo "Usage: $0 file/dir dir" && exit 1
  10. DIRTO=$(eval echo \${$#%/})
  11. if [ ! -d "$DIRTO" ]; then
  12. echo "directory not exist: $DIRTO"
  13. exit 1
  14. fi

  15. cp_dir(){
  16. DIRFROM=`echo ${1%/}`
  17. DIR=`echo ${DIRFROM##*/}`
  18. DIRGB=`echo $DIR | iconv -f UTF-8 -t gb18030`
  19. if [ x$DIRGB == x ]; then
  20. echo convert fail: "$DIR"
  21. return 1
  22. fi
  23.   find  $DIRFROM -type d | sed "s@$DIRFROM@@" | iconv -f UTF-8 -t gb18030 | while read i; do mkdir "$DIRTO/$DIRGB$i"; done
  24.   find  $DIRFROM -type f | sed "s@$DIRFROM@@" | while read i; do k=`echo $i | iconv -f UTF-8 -t gb18030` ; cp "$DIRFROM$i" "$DIRTO/$DIRGB$k"; done
  25. }

  26. cp_file(){
  27.     gbfile=`echo ${1##*/} | iconv -f UTF-8 -t gb18030`
  28.     cp "$1" "$DIRTO/$gbfile"
  29. }

  30. while :; do [ $# -eq 1 ] && break
  31.   if [ -f "$1" ] 2>/dev/null; then
  32.     cp_file "$1" "$DIRTO"
  33.   else if [ -d "$1" ]; then
  34.           cp_dir "$1" "$DIRTO"
  35.        fi
  36.   fi
  37.   shift
  38. done

复制代码
发表于 2006-8-29 20:24:39 | 显示全部楼层
iconv -f UTF-8 -t gb18030`
回复 支持 反对

使用道具 举报

发表于 2006-8-29 23:38:30 | 显示全部楼层
iconv -f utf8 -t gb18030  sourcefile  > targetfile
就好了。不用拷贝什么的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-30 00:47:55 | 显示全部楼层
原来没说清楚,改进了一下脚本。
把 [color="Red"]UTF-8 文件系统的文件/目录 复制到 [color="Red"]GB18030 文件系统中
回复 支持 反对

使用道具 举报

发表于 2006-8-30 02:04:11 | 显示全部楼层
。。实在不知道你想干嘛,你的思维有点混乱。。filesystem 是不分 gb18030 或者 utf8 的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-30 08:04:39 | 显示全部楼层
呵呵,乱套了。
是想把UTF-8文件名 转换成 GB18030文件名
回复 支持 反对

使用道具 举报

发表于 2006-8-30 08:09:25 | 显示全部楼层
那用 convmv 就可以了。。。没必要自己写脚本。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-30 08:17:54 | 显示全部楼层
是在extra里面的哪个包?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-17 11:59:24 | 显示全部楼层
Changelog:

Version: 0.0.4
Date   : 2006-09-18
增加对通配符的支持。

Version: 0.0.3
Date   : 2006-09-15
修正一些bug,优化代码,提高执行速度。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表