У меня есть папка, включают много txt файлов и подпапок, который также содержит много txt файлов.
Я хочу изменить все кодирование файлов автоматически. Прямо сейчас я знаю, как изменить один файл с помощью команды:
iconv -f gbk -t utf8 sample.txt > sample.wiki
Я нуждаюсь в названии файла, не измененного, и изменяю его расширение .wiki. Как я могу достигнуть этого автоматически?
Можно выполнить итерации, хотя эти .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