|
扔块砖头,有兴趣的试一试。
把UTF-8文件名 转换成 GB18030文件名的一个 bash 脚本:
- #!/bin/bash
- # Convert filename from UTF-8 to GB18030.
- # License: GPL 2.0 and/or later.
- # Version: 0.0.4
- # Date : 2006-09-18
- # Contact: linux_now AT bbs of linuxsir
- # Name : cp_utf2gb.sh
- # Usage : cp_utf2gb.sh file/dir dir
- [ $# -lt 2 ] && echo "Usage: $0 file/dir dir" && exit 1
- DIRTO=$(eval echo \${$#%/})
- if [ ! -d "$DIRTO" ]; then
- echo "directory not exist: $DIRTO"
- exit 1
- fi
- cp_dir(){
- DIRFROM=`echo ${1%/}`
- DIR=`echo ${DIRFROM##*/}`
- DIRGB=`echo $DIR | iconv -f UTF-8 -t gb18030`
- if [ x$DIRGB == x ]; then
- echo convert fail: "$DIR"
- return 1
- fi
- find $DIRFROM -type d | sed "s@$DIRFROM@@" | iconv -f UTF-8 -t gb18030 | while read i; do mkdir "$DIRTO/$DIRGB$i"; done
- 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
- }
- cp_file(){
- gbfile=`echo ${1##*/} | iconv -f UTF-8 -t gb18030`
- cp "$1" "$DIRTO/$gbfile"
- }
- while :; do [ $# -eq 1 ] && break
- if [ -f "$1" ] 2>/dev/null; then
- cp_file "$1" "$DIRTO"
- else if [ -d "$1" ]; then
- cp_dir "$1" "$DIRTO"
- fi
- fi
- shift
- done
复制代码 |
|