Измените кодирование каждого .txt файла в папке и ее подпапках

У меня есть папка, включают много txt файлов и подпапок, который также содержит много txt файлов.

Я хочу изменить все кодирование файлов автоматически. Прямо сейчас я знаю, как изменить один файл с помощью команды:

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

Я нуждаюсь в названии файла, не измененного, и изменяю его расширение .wiki. Как я могу достигнуть этого автоматически?

3
задан 21 August 2016 в 12:50

1 ответ

Можно выполнить итерации, хотя эти .txt файлы, кодирование изменения, сохраняют вывод в .wiki файл того же имени с помощью -o опция iconv и, если успешный удаляют соответствующее .txt файл:

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

Протест:

, Если входной файл не находится в данном исходном кодировании или уже в целевом кодировании, iconv, возвратит true, не делая никакой операции, следовательно .wiki, файл не будет создан и .txt, файл будет удален.

Для работы вокруг этого можно сохранить STDOUT после преобразования в переменной и если переменная не - пуста, только затем сохраняют вывод в .wiki файл и удаляют 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
4
ответ дан 1 December 2019 в 15:54

Другие вопросы по тегам:

Похожие вопросы: