LINUX.ORG.RU

find + iconv = 0


0

0

Почему при выполнении этой команды я получаю пустые файлы?

find ./ -name "*.html" -exec iconv -f cp1251 -t koi8-r -o {} {} \;

anonymous

возьми recode.

find -name "*.html" -exec recode cp1251..koi8-r {} \;

uj2 ★★★
()

$ find ./ -name "*.html" -exec iconv -f cp1251 -t koi8-r -o {} {} \;

Внимательно посмотри на это: "-o {} {}"

Ты полагаешь, что из текущего файла будет считано содержимое (куда-нибудь-неважно, например, в память), перекодировано и записано в файл с тем же именем, не так ли?

На самом деле, "-o {}" подготавливает файл, куда будет записан результат ДО того, как оттуда что-либо было прочитано.

В итоге, "-o {}" затирает/обнуляет содержимое файла, затем читает пустой файл и заканчивает работу с этим файлом без ошибок :)

Самым простым будет для тебя добавить в строку команду создания каталога "mkdir ./tmp" и писать выход перекодировки туда "-o ./tmp/{}" :

$ mkdir ./tmp ; find ./ -name "*.html" -exec iconv -f cp1251 -t koi8-r -o ./tmp/{} {} \;

Теперь все перекодированные файлы лежат в ./tmp/*.html

anonymous
()
Ответ на: комментарий от anonymous

> Здесь нужен временный файл

> Объяснить почему? :)

Да. Почему?

Не нужен. Здесь нужно входной открыть и удалить до обрезания выходного.

fk0
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.