博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Linux] 批量转换整个目录下的文件编码为UTF-8;
阅读量:6912 次
发布时间:2019-06-27

本文共 3467 字,大约阅读时间需要 11 分钟。

 

1 #!/bin/bash -   2 #===============================================================================  3 #  4 #          FILE: conv.sh  5 #   6 #         USAGE: ./conv.sh   7 #   8 #   DESCRIPTION:   9 #  10 #       OPTIONS: --- 11 #  REQUIREMENTS: --- 12 #          BUGS: 目前不支持传入参数中含有空格; 13 #         NOTES: --- 14 #        AUTHOR: linkscue (scue), linkscue@gmail.com 15 #       CREATED: 2013年03月06日 22时52分31秒 HKT 16 #     COPYRIGHT: Copyright (c) 2013, linkscue 17 #      REVISION: 0.1 18 #  ORGANIZATION: --- 19 #=============================================================================== 20  21 __ScriptVersion="0.1" 22  23 #===  FUNCTION  ================================================================ 24 #         NAME:  usage 25 #  DESCRIPTION:  Display usage information. 26 #=============================================================================== 27 function usage () 28 { 29         cat <<- EOT 30  31   Usage :  $0 -s suffix1 -s suffix2 -d dir1 -d dir2 -f file1 -f file2 32  33   Options: 34   -h|help       Display this message 35   -v|version    Display script version 36   -s suffix     Setting suffix 37   -d directory  Convert all file encoding to UTF-8 38   -f file       Convert a file encoding to UTF-8 39  40 EOT 41 }    # ----------  end of function usage  ---------- 42  43 #----------------------------------------------------------------------- 44 #  Handle command line arguments 45 #----------------------------------------------------------------------- 46  47 suffixs=() 48 directorys=() 49 files=() 50 while getopts ":hvd:f:s:" opt 51 do 52   case $opt in 53  54     h|help     )  usage; exit 0   ;; 55  56     v|version  )  echo "$0 -- Version $__ScriptVersion"; exit 0   ;; 57  58     f  )  files+=("$OPTARG")   ;; 59  60     d  )  directorys+=("$OPTARG")   ;; 61  62     s  )  suffixs+=("$OPTARG")   ;; 63  64     \? )  echo -e "\n  Option does not exist : $OPTARG\n" 65           usage; exit 1   ;; 66  67   esac    # --- end of case --- 68 done 69 shift $(($OPTIND-1)) 70  71 # 检查输入 72 if [[ ${#files} -lt 1 ]] && [[ ${#directorys} -lt 1 ]]; then 73     usage 74     exit 75 fi 76  77 TMPFILE="$(mktemp -t convXXXXXX)" 78 trap "rm -f '$TMPFILE'" 0               # EXIT 79 trap "rm -f '$TMPFILE'; exit 1" 2       # INT 80 trap "rm -f '$TMPFILE'; exit 1" 1 15    # HUP TERM 81  82 #------------------------------------------------------------------------------- 83 #  转换编码函数 84 #------------------------------------------------------------------------------- 85 conv_utf8(){ 86     file="$1" 87     echo "处理文件: '$file' ..." 88     iconv -f gb2312 -t UTF-8 "$file" -o $TMPFILE 2> /dev/null &&\ 89         mv -f $TMPFILE "$f" || { 90         echo "转换失败: '${file}'" 91     } 92 } 93  94 # 转换文件 95 for f in "${files[@]}"; do 96     conv_utf8 "$f" 97 done 98  99 # 转换目录文件100 if [[ ${#directorys} -gt 1 ]]; then101     if [[ ${#suffixs} -lt 1 ]]; then102         echo103         echo "请指定需转换编码的文件后缀,如 '-s txt -s java'"104         echo105         usage106         exit107     else108         for s in "${suffixs[@]}"; do109             for f in $(find $directorys -type f -name "*.${s#.}"); do110                 conv_utf8 "$f"111             done112         done113     fi114 fi

 

假如把这个脚本内容保存至~/bin/conv,并给予权限;

使用举例:

  1. conv -f file1 -f file2 -s java -s xml -d dir1 -d dir2

  2. conv -s java -d .

  3. conv -s java -s xml -d android_helloworld

  4. conv -f file1 -f file2

有了这个转换编码,把Windows下的工程引入到Linux上开发就轻松得多了,不再有什么字符编码读不出来的问题;

转载地址:http://itncl.baihongyu.com/

你可能感兴趣的文章
Maven详解(七)------ 创建Web工程以及插件原理
查看>>
二进制传输与文本传输的区别
查看>>
YMP运行初始化步骤
查看>>
Getting Started with the G1 Garbage Collector(译)
查看>>
MySql5.7.11 for Windows 安装精简版(一)
查看>>
Java线程池
查看>>
imx6设备树pinctrl解析【转】
查看>>
vue.js 入门
查看>>
Ansible系列(三):YAML语法和playbook写法
查看>>
JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理...
查看>>
Python 面向对象
查看>>
JAXB xml与javaBean的转换
查看>>
ResultSet 的Type属性 TYPE_FORWARD_ONLY, TYPE_SCROLL_I
查看>>
C#多线程--线程池(ThreadPool)
查看>>
Android FileProvider相关 Failed to find configured root that contains
查看>>
【Win 10 应用开发】UI Composition 札记(七):基于表达式的动画
查看>>
2.lombok系列2:lombok注解详解
查看>>
redis——学习之路五(简单的C#使用redis)
查看>>
Log4j中为什么设计isDebugEnabled()方法
查看>>
工作文件夹分类
查看>>