MST

星途 面试题库

面试题:Bash结合iconv处理复杂文本编码转换场景

在一个目录中有多个子目录,每个子目录下都有一些文本文件,这些文件的编码可能是UTF - 8、ISO - 8859 - 1或GB2312中的一种。编写一个Bash脚本,使用iconv命令将所有文件统一转换为UTF - 8编码,并保持目录结构不变。脚本需要高效处理大量文件,同时要能够处理文件编码检测错误的情况,例如某些文件编码异常无法转换,此时要记录这些文件的路径到`error_files.log`文件中。
32.3万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 定义函数来转换文件编码
convert_file() {
    local file="$1"
    local temp_file=$(mktemp)
    iconv -f $(file -bi "$file" | cut -d ';' -f1) -t UTF-8 "$file" > "$temp_file" 2>/dev/null
    if [ $? -eq 0 ]; then
        mv "$temp_file" "$file"
    else
        echo "$file" >> error_files.log
        rm "$temp_file"
    fi
}

# 遍历所有子目录及文件
find . -type f -name "*.txt" | while read -r file; do
    convert_file "$file"
done