Então a solução para mim acabou sendo usar o recode. Não há muita documentação excelente, mas o truque era usar a opção -f para forçá-la a alterá-la.
recode -f UTF-7 *.txt
Tenho cerca de 700 arquivos que resultaram de um processo de software de closed caption. Eu posso abrir os arquivos no meu PC ou Mac em uma interface gráfica, mas quando eu abri-lo no servidor com nano, eu recebo isso:
��0^@0^@;^@0^@0^@;^@0^@0^@;^@0^@0^@ ^@0^@0^@;^@0^@0^@;^@0^@6^@;^@0^@0^@
^@
^@N^@o^@t^@ ^@A^@v^@a^@i^@l^@a^@b^@l^@e^@
Aqui estão os resultados de algumas das coisas da linha de comando que tentei:
#file infile.txt
infile.txt: data
# file -bi --mime-encoding infile.txt
application/octet-stream; charset=binary
recode ../CR-LF infile.txt
#file -bi --mime-encoding infile.txt
#iconv -f binary -t uff-8 infile.txt > out.txt
iconv: conversions from 'binary' and to 'uff-8' are not supported
#recode ../CR-LF infile.txt
#recode UTF8..ISO-8859-15 infile.txt
# file -bi --mime-encoding infile.txt
text/plain; charset=utf-16le
#xxd infile.txt | head -5
0000000: fffe 3000 3000 3b00 3000 3000 3b00 3000 ..0.0.;.0.0.;.0.
0000010: 3000 3b00 3000 3000 2000 3000 3000 3b00 0.;.0.0. .0.0.;.
0000020: 3000 3000 3b00 3000 3600 3b00 3000 3000 0.0.;.0.6.;.0.0.
0000030: 0d00 0d0a 004e 006f 0074 0020 0041 0076 .....N.o.t. .A.v
0000040: 0061 0069 006c 0061 0062 006c 0065 00 .a.i.l.a.b.l.e.
O arquivo atual se parece com isso (acontece que não foi a melhor escolha, eu acidentalmente escolhi um sem muita coisa nele):
00;00;00;00 00;00;06;00
Not Available
Então, se eu nano o arquivo, eu recebo texto na parte inferior que diz que foi convertido do formato DOS e Mac, mas ainda é tudo lixo. Eu preciso ser capaz de percorrer os arquivos e importar os dados para um banco de dados, mas é claro que não posso fazer isso se o servidor não conseguir ler o formato.
Eu gostaria de encontrar uma solução de longo prazo, pois gerarei muitos deles no futuro, e prefiro não usar o Windows PowerShell ou equivalente, mas incorporar a conversão em meu processo.
Tags bash batch linux shell shell-script