Se todos os arquivos pesquisados tiverem a mesma codificação:
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(echo 'привет' | iconv -t KOI8-R)" *.txt
ou no bash ou zsh
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(iconv -t KOI8-R <<<'привет')" *.txt
Ou inicie um shell filho na codificação desejada:
$ LC_CTYPE=ru_RU.KOI8-R luit
$ ack-grep 'привет' *.txt
$ exit
Luit (fornecido com XFree86 e X.org) executa o programa especificado em seu comando linha na localidade especificada pela configuração LC_CTYPE
, assumindo um terminal UTF-8. Portanto, o comando é executado na localidade desejada e o Luit converte sua saída de terminal para UTF-8.
Outra abordagem, se você tiver uma árvore de diretórios com muitos arquivos em uma codificação diferente, é montar uma exibição dessa árvore de diretórios em uma codificação preferida. Eu acho que o sistema de arquivos fuseflt pode fazer isso (não testado).
mkdir /utf8-view
fuseflt iconv-koi8r-utf8.conf /some/dir /utf8-view
ack-grep 'привет' /utf8-view/*.txt.utf8
fusermount -u /utf8-view
em que o arquivo de configuração iconv-koi8r-utf8.conf
contém
ext_in =
ext_out = *.utf8
flt_in =
flt_out = .utf8
flt_cmd = iconv -f KOI8-R -t UTF-8