Linux实现图形化选择文件并转码
本文实现一个可以在图形化界面下选择文件并进行编码转换
需求
需要实现在Linux下使用图形化界面选择一个文件并且把该文件的编码由UTF8转换成GBK
需求分析
在Linux下使用命令iconv可以实现把文件的编码进行转换
直接写一个命令或者脚本即可,但是本例需要实现在图形化界面下选择文件
我们使用zenity工具
使用zenity图形化界面参考 https://www.cnblogs.com/minseo/p/15937381.html
流程图
脚本如下
#!/bin/bash
#Time: 2022-02-25
#Email:
#Author: Liuym
#File: csv_decode.sh
#Project:
#Description: 本脚本实现把uf8编码转换成gbk编码
#How Use:运行脚本,选择需要转换的csv文档,在当前文档目录生成新文档
#判断系统是否有对应工具函数
#彻底一个参数为命令,如果系统没有这个命令则弹出提示并退出
check_command(){
echo $1
command_exe=$1
command_num=`which ${command_exe}|wc -l`
if [ ${command_num} -lt 1 ]
then
zenity --info --title="警告" --text="系统没有${command_exe}命令,请联系管理员安装"
exit
else
command_exe=`which ${command_exe}`
fi
}
csv_devode(){
#选择需要转换的csv文件
csv_file=$(zenity --title="请选择需要转换的文件" --file-selection)
if [ -z ${csv_file} ]
then
zenity --info --title="警告" --text="用户取消操作,请重新运行程序转码"
fi
#判断文件编码再决定是否转换
csv_file_num=`${file_exe} ${csv_file}|grep ISO|wc -l`
if [ ${csv_file_num} -ge 1 ]
then
zenity --info --title="提示" --text="文件格式正确无需转换"
else
nowtime=$(date +%Y%m%d)
#获取文件文件夹信息
csv_file_folder=`dirname ${csv_file}`
#获取文件名信息
csv_file_name=`echo ${csv_file}|awk -F[/] '{print $NF}'`
${iconv_exe} -f utf8 -t gb18030 ${csv_file} > ${csv_file_folder}/${nowtime}_${csv_file_name}
zenity --info --title="提示" --text="转换成功,转换后文件为${csv_file_folder}/${nowtime}_${csv_file_name}"
fi
}
main(){
check_command zenity
zenity_exe=`which zentiy`
check_command iconv
iconv_exe=`which iconv`
check_command file
file_exe=`which file`
csv_devode
}
main