我正在尝试将iconv指向一个目录,并且无论当前编码如何,所有文件都将转换为UTF-8
我正在使用这个脚本,但您必须指定您要使用的编码。如何让它自动检测当前的编码?
dir_iconv.sh
#!/bin/bash
ICONVBIN='/usr/bin/iconv' # path to iconv binary
if [ $# -lt 3 ]
then
echo "$0 dir from_charset to_charset"
exit
fi
for f in $1/*
do
if test -f $f
then
echo -e "\nConverting $f"
/bin/mv $f $f.old
$ICONVBIN -f $2 -t $3 $f.old > $f
else
echo -e "\nSkipping $f - not a regular file";
fi
done
终端线
sudo convert/dir_iconv.sh convert/books CURRENT_ENCODING utf8
发布于 2012-05-01 10:20:25
你可以使用标准的gnu utils文件和awk获取你需要的东西。示例:
file -bi .xsession-errors
给我:“文本/纯文本;字符集=us-ascii”
所以file -bi .xsession-errors |awk -F "=" '{print $2}'
给了我"us-ascii“
我在脚本中使用它,像这样:
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$i" -o outfile
fi
发布于 2012-11-07 03:37:01
把它们都编译起来。转到目录,创建dir2utf8.sh
#!/bin/bash
# converting all files in a dir to utf8
for f in *
do
if test -f $f then
echo -e "\nConverting $f"
CHARSET="$(file -bi "$f"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$f" -o "$f"
fi
else
echo -e "\nSkipping $f - it's a regular file";
fi
done
发布于 2014-04-03 23:13:16
下面是使用recode和uchardet放置所有文件的my solution
#!/bin/bash
apt-get -y install recode uchardet > /dev/null
find "$1" -type f | while read FFN # 'dir' should be changed...
do
encoding=$(uchardet "$FFN")
echo "$FFN: $encoding"
enc=`echo $encoding | sed 's#^x-mac-#mac#'`
set +x
recode $enc..UTF-8 "$FFN"
done
将其放入convert-dir-to-utf8.sh
并运行:
bash convert-dir-to-utf8.sh /pat/to/my/trash/dir
请注意,sed
是这里针对mac编码的一种变通方法。许多不常见的编码都需要这样的变通方法。
https://stackoverflow.com/questions/9824902
复制相似问题