Altera a codificação de cada arquivo .txt em uma pasta e suas subpastas

3

Eu tenho uma pasta que inclui muitos arquivos txt e sub-pastas que também contém muitos arquivos txt.

Eu quero alterar automaticamente a codificação de todos os arquivos. Agora eu sei como mudar um arquivo usando o comando:

iconv -f gbk -t utf8 sample.txt > sample.wiki

Eu preciso que o nome do arquivo não seja alterado e mude sua extensão para .wiki. Como posso conseguir isso automaticamente?

    
por buzhidao 21.08.2016 / 11:50

1 resposta

4

Você pode percorrer os arquivos .txt , alterar a codificação, salvar a saída no arquivo .wiki do mesmo nome usando a opção -o de iconv e, se tiver êxito, remover o arquivo .txt relevante:

shopt -s globstar  ## Enables recursive glob matching
for f in **/*.txt; do
    iconv -f gbk -t utf8 -o "${f%.txt}".wiki "$f" && rm "$f"
done

Advertência:

Se o arquivo de entrada não estiver em codificação de origem ou já estiver na codificação de destino, iconv retornará true sem executar nenhuma operação, portanto, o arquivo .wiki não será criado e o arquivo .txt será removido .

Para contornar isso, você pode salvar o STDOUT após a conversão em uma variável e, se a variável não estiver vazia, salvar a saída no arquivo .wiki e remover o arquivo txt :

shopt -s globstar  ## Enables recursive glob matching
for f in **/*.txt; do
    out="$(iconv -f gbk -t utf8 "$f")" 
    [[ -n $out ]] && echo "$out" >"${f%.txt}".wiki && rm "$f"
done
    
por heemayl 21.08.2016 / 12:00