[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

A script that convert filename from gbk to utf8, some question.



这个脚本想将一个目录下的所有中文目录和文件名从gbk编码转到UTF-8编码,38个
G的文件,所以比较谨慎,文件因为加了acl,所以转换过程中不能用cp,只能用mv。
1 #!/bin/bash
2 #cvtdir.sh
3
4 cvitem()
5 {
6 buf=$(dirname "$*")/$(basename "$*" | iconv -f gbk -t utf8 )
7 [ "$*" != "$buf" ] && {
8 echo $(mv "$*" "$buf")
9 echo "mv $* $buf"
10 }
11 }
12
13 cvdir()
14 {
15 for subitem in "$*"/*
16 do
17 if [ -d "$subitem" ]
18 then
19 echo "cvdir $subitem"
20 cvdir $subitem
21 else
22 echo "cvitem $subitem"
23 cvitem $subitem
24 fi
25 done
26 cvitem $*
27 }
28
29 [ $# = 0 ] && { echo "Usage: $0 目录绝对路径"; exit; }
30
31 for item in $*
32 do
33 if [ -d $item ]
34 then
35 echo "cvdir $item"
36 cvdir $item
37 else
38 echo "cvitem $item"
39 cvitem $item
40 fi
41 done

文件来源:http://bbs.chinaunix.net/forum/viewtopic.php?t=26216&highlight
= %D7%AA%BB%BB ,做了一些修改。

第一个问题:怎么通过程序来判断一个文件的文件名是gbk编码而不是utf8编码
的?如果不能做到这一点的话,万一程序在执行当中出错而退出的话,那整个目录
就没得救了。

第二个问题:这个程序在gbk环境下执行应该没有问题,但是在UTF-8环境下就可能
有问题,比如说我有一个中文目录(GBK编码),下面有一些文件,在 UTF-8下执
行第15行 for subitem in "$*"/* ,无法获取这个目录下的文件,从而将略过这
个目录,怎样修改才可以让它可以不管在哪种环境下都可以正常运行?

sina邮箱收不了列表的邮件,请抄送给我。



Reply to: