`

Linux下如何批量转码txt

 
阅读更多

来源:http://hi.baidu.com/curioz/blog/item/2555863514f9491d90ef390d.html

 

下载了不少文本txt,如verycd上的致纯书苑,解压看看是GBK编码。我用的Ubuntu Linux默认编码用UTF8(估计大部分Linux发行版都是),这样用grep等命令就很不方便,需要转码。

有iconv可用:

用法: iconv [选项...] [FILE...]
转换给出文件的编码从一种到另外一种.

输入/输出格式规范
-f, --from-code=NAME 原始文本编码
-t, --to-code=NAME 输出编码

信息
-l, --list 列出所有已知编码字符集

输出控制:
-c 忽略输出中的无效字符
-o, --output=FILE 输出文件
-s, --silent suppress warnings
--verbose 打印进程信息

-?, --help 显示此帮助列表
--usage 提供简短的使用信息
-V, --version 显示程序版本号

一般 iconv -c -fgbk -tutf8 XXX.txt -o XXX-u8.txt就可以了,-c选项很有用,遇到错误还可以继续而不是退出。

问题是现在文件有成千上万,试图用for循环完成这个任务:
for i in `ls *.txt` ; do iconv -c -fgbk -tutf8 $i -o u$i ;done
但事与愿违,检查了下发现是因为有写文件名带有空格,导致变量i赋值不对,比如对文件“十二楼 清 李渔.txt”,i被赋值三次,得到如下出错信息
iconv: 无法打开输入文件'十二楼': 没有该文件或目录
iconv: 无法打开输入文件'清': 没有该文件或目录
iconv: 无法打开输入文件'李渔.txt': 没有该文件或目录

研究了下,想到一个办法可以勉强完成任务,源码如下:

#! /bin/bash

# convert txt files in current dir fro gbk to utf8
# output saved to the dir `pwd`_u

PWD=`pwd`
UDIR="$PWD"_u
mkdir $UDIR
for i in `ls -l *.txt|cut -c51-120 |tr [:blank:] _` ; do
iconv -c -fgbk -tutf8 "${i//_/ }" -o "$UDIR/$i"
done

上面用到cut和tr先将空格转换,以便变量i正确赋值,调用时再通过字符替换(${i//_/ })转回来。效果是将本目录下的所有txt文件从GBK转码为UTF8的同名文件(如文件名有空格则被下划线替换),如当前目录为mydir/test/,则转换后的文件放在mydir/test_u/下面。

还没想好如何处理当前目录下的子目录,估计要用find命令,关键是先建立一个与当前目录结构相同的平行目录。如果你有好办法,请留言。

_____________________
updated in 05/13/2010
1. google了下,发现处理带空格文件名不用这么麻烦,用 for i in *.txt 就可以了,上面用for i in `ls *.txt`是画蛇添足了。(cf: http://blog.csdn.net/sabalol/archive/2009/11/12/4804607.aspx)

2. 复制目录结构用find和-exec就可实现,如在当前test目录下执行:
find . -type d -exec mkdir -p ../test_u/{} \; (cf: http://showmealone.blog.sohu.com/138666105.html)

See also:
从新浪读书下载纯文本格式书籍(附bash代码)

分享到:
评论

相关推荐

    Linux Shell命令转码解压获取目录批量杀进程

    Linux Shell命令转码解压获取目录批量杀进程

    Linux系统文件乱码转码工具

    这个工具允许用户一次性选择多个文件或整个目录进行批量转码,大大提高了效率。 4. **预览和确认**:在实际转换前,工具提供预览功能,让用户确认转换效果,避免因错误的编码判断导致数据丢失。 5. **安全备份**:...

    使用 Java 对 Linux 下文件编码格式进行批量转换源代码

    测试使用说明: 1。将 字符集编码格式为 GB2312 的文件 test0.java,test...使用本工具可以对 Linux 下文件的字符集编码格式进行批量转换。只需适当配置一下,可以批量处理各种文件格式的文件,如 *.txt,*.java 等等。

    python整合ffmpeg实现视频文件的批量转换

    没有关系,命令行方式,在freebsd/linux下直接来 我们的思路是,设定一个文件夹存放源视频文件,python读取该文件夹下的全部文件,并对文件通过ffmpeg进行分析,根据需要,修改目标文件的编码、分辨率等等,调用...

    HandBrake-跨平台免费开源视频转码器/视频压缩转码压制工具

    它可以轻松进行视频转码、压缩视频体积等操作,同时支持设置裁切、视频质量、字幕、滤镜、编解码器等功能,提供丰富的可选参数,并支持批量转换。用户可以直接将视频文件或文件夹拖放到HandBrake界面上开始处理,...

    多文件转码小程序

    多文件转码小程序,linux文件夹拷贝到windows下,往往会出现乱码,此程序可帮您批量进行转码

    微信qq音频转码.zip

    综上所述,"微信qq音频转码.zip"提供了在Windows和Linux环境下进行音频转码的工具和指导,利用Java语言的跨平台优势,结合操作文档和脚本实例,使得用户可以轻松处理不同格式的音频文件,提高工作效率。在实际操作中...

    批量文件名编码转换.7z

    这个压缩包中的主要工具是 "批量URL转码文件命名.exe",它专门针对URL编码问题,旨在解决文件名在互联网传输或在不支持特定字符集的系统中可能出现的问题。 URL编码,也称为百分号编码(% encoding),是统一资源...

    java批量修改指定文件夹下多级文件编码格式

    经常碰到文件编码格式不一致导致一堆问题,想在linux上批量修改文件夹下的文件编码,操作太麻烦,花了一点时间写了个java程序来操作,用着非常方便,详情如下: 在FileEncodeTranslate类中,修改一下源文件夹路径,...

    非常好的转码工具

    5. **批量处理**:对于大批量文件的转码任务,工具应支持批量操作,节省人力和时间。 6. **界面友好**:直观易用的用户界面能让非技术背景的用户也能轻松上手。 7. **跨平台**:能在多种操作系统上运行,如Windows...

    模板转码专用工具

    8. **拓展功能**:高级的模板转码工具可能还包括预览功能、批量处理、错误检查与修复、自定义转换规则等功能,以提高工作效率和转码质量。 9. **学习资源**:对于初学者,可以通过在线教程、官方文档或社区论坛来...

    如何使用 FFmpeg 进行视频转码

    FFmpeg可以用于不仅限于转码,还包括媒体文件的合并、批量处理等操作。通过实际操作并结合文档学习,用户可以逐步提升使用FFmpeg的能力。 作者@FiveYellowMice在Wiki上提供了本教程的最新版本,而@gloomy-ghost维护...

    handbreak视频转码

    6. **批量转换**:Handbrake支持批量处理,用户可以一次性添加多个视频文件进行转码,大大提高了工作效率。 7. **章节和字幕**:转码过程中,用户可以选择保留原始视频的章节信息,并添加或保留字幕文件,确保转码...

    简单的UTF-8与GBK之间相互转码工具

    因此,一个在Linux环境下正常工作的程序,在Windows下可能会遇到乱码问题,反之亦然。 描述中的“编码转码工具”就是为了解决这类问题。这个名为`encoding_p.java`的Java源代码文件,应该包含了一个简单的类或函数...

    文件编码批量转换工具(不用积分)

    项目中有很多文件因为编码的原因导致用户使用的时候看到的是乱码,或是不兼容的情况,网上找了一圈 也没有适合咱程序员的转码的工具,所以写了一个批量转换工具 虽然已经使用在我司生产项目中,但还是建议你转换前...

    linux-86-jar包.zip

    在IT行业中,Linux环境下的Java开发常常涉及到对图像和视频的处理,这通常需要借助一些强大的库来实现。"linux-86-jar包.zip"是一个包含多种图像和视频处理库的压缩文件,专为在Linux 32位环境下运行的Java应用设计...

    transcode_linux

    总的来说,“transcode_linux”提供了一个高效、可定制的视频转码解决方案,尤其适合那些需要在Linux环境下批量处理视频的用户。通过理解ffmpeg和libx264的功能,以及如何利用多线程优化转码过程,用户可以充分利用...

    linux-VideoConversionTool基于FFmpeg的视频转换小工具

    Linux下的VideoConversionTool是一款利用FFmpeg库实现的视频转换工具,它主要由Shell脚本编写,方便用户在命令行环境中快速、便捷地进行视频格式的转换。FFmpeg是一款强大的跨平台多媒体处理工具,包含了编解码器、...

    使用iconv批量改变文件编码的shell脚本

    这篇文章主要介绍了编写shell脚本,使用iconv批量改变文件编码的脚本代码,需要的朋友可以参考下。 用法示例: cd ~/workspace/XXXProject ~/iconv_shell.sh ./ *java 好了,直接上代码~~ #!/bin/bash if [ $# != 2...

    win系统使用jave1.0.2 jar 把微信amr语音格式转码为mp3格式

    在Linux系统中,FFmpeg通常已经预装或可以通过包管理器轻松安装,但在Windows下,你需要单独下载并安装FFmpeg的Windows版本。 在Java编程环境中,你可以使用Java的Runtime类或者ProcessBuilder类来执行系统命令,...

Global site tag (gtag.js) - Google Analytics