检测并转换文件列表的编码

时间:2015-01-08 17:35:17

标签: linux shell command

我有一个包含ISO-8859和UTF8编码文件的目录。我想将所有ISO文件转换为UTF8编码,并保持UTF8文件不变。到目前为止,我有这个:

for isoFile in `file exports/invoice/* | grep "ISO-8859"`; do iconv -f iso-8859-1 -t utf-8 "$isoFile" -o "$isoFile"; done

问题是file exports/invoice/* | grep "ISO-8859"以这种格式返回文件列表:

exports/invoice/2014.03547.html:                 HTML document, ISO-8859 text, with very long lines, with CRLF, LF line terminators

当然不适用于iconv。我需要从这个字符串中提取文件名并通过iconv运行它。

2 个答案:

答案 0 :(得分:1)

易于使用awk:

file exports/invoice/* | grep "ISO-8859" | awk -F':' '{print $1}'

答案 1 :(得分:0)

您可以使用以下命令从此字符串中提取文件名:

cut -d' ' -f1 //to select first column

rev | cut -c 2- | rev //to remove ':' from the end of the name

所以提取文件名的整个命令都是这样的:

file exports/invoice/* | grep "ISO-8859" | cut -d' ' -f1 | rev | cut -c 2- | rev

它会返回给你:exports / invoice / 2014.03547.html