У меня есть старый компьютер, на котором установлен стабильный Debian, который нуждается в обновлении. Проблема в том, что он использует latin1 (ISO-8859-1) для всего, и, поскольку остальной мир перешел на UTF-8, я планирую преобразовать и этот компьютер.
И в этом вопросе я сосредоточусь на файлах, которые обслуживаются Samba, и некоторые из них содержат символы latin1 в именах файлов (например, åäö).
Теперь я планирую переместить все данные с этого старого компьютера на новый, на котором работает стабильная версия Debian (но с UTF-8).
У кого-нибудь есть хорошая идея?
Заметка: в дальнейшем планирую использовать iconv
чтобы преобразовать содержимое некоторых файлов примерно так:
iconv --from-code=ISO-8859-1 --to-code=UTF-8 iso.txt > utf.txt
Однако я не знаю, как правильно преобразовать файловую систему.
Заметка: Обычно я просто scp
с одного компьютера на другой, но затем я получаю символы latin1 в файловой системе utf-8.
Обновить: Сделал небольшой тестовый раунд с полным набором файлов (с забавными символами) в именах файлов, и похоже, что это может сработать.
convmv -r -f ISO-8859-1 -t UTF-8 *
Заметка: -r
= рекурсивный; -f
/-t
= от / до.
Так что это было только для выполнения с --notest
convmv -r -f ISO-8859-1 -t UTF-8 --notest *
Больше ничего.
Используйте convmv:
Package: convmv
Priority: optional
Section: utils
Installed-Size: 88
Maintainer: Raphael Zimmerer <killekulla@rdrz.de>
Architecture: all
Version: 1.12-1
Depends: perl
Filename: pool/main/c/convmv/convmv_1.12-1_all.deb
Size: 20052
MD5sum: dcc45d5b8517026f588d769d81d67768
SHA1: 55da9650cfee5c64d8a4fdf278aaf9401a5e5dec
SHA256: 0a8b0165a78dc42f7dc665a14d21c22ce0433d115fe537be2af74682d3b82a5f
Description: filename encoding conversion tool
convmv can convert a single filename, a directory tree or all files
on a filesystem to a different encoding. It only converts the
encoding of filenames, not files contents. A special feature of
convmv is that it also takes care of symlinks: the encoding of the
symlink's target will be converted if the symlink itself is being
converted.
.
It is also possible to convert directories to UTF-8 which are already
partially UTF-8 encoded.
.
Keywords: rename, move
Tag: devel::i18n, implemented-in::perl, interface::commandline, role::program, scope::utility, works-with::file
apt-get install convmv
:-)
Примечание для читателей, которые зашли на эту страницу до того, как перенесли файлы:
вы можете выполнить передачу с помощью недавнего rsync и параметра --iconv:
rsync -va --iconv=utf8,iso88591 /source/latin1/ /destination/utf8
(да, порядок кодировки iconv не интуитивно понятен!)
Поскольку, когда передача уже выполнена, действительно решение - convmv.
Есть Конвертер кодировки символов Unicode который поддерживает преобразование кодировки символов между Unicode (UTF-8 / UTF-16 / UTF-7 / UTF-32) и не Unicode (Ansi, китайский упрощенный GBK, китайский традиционный BIG5, японский SHIFT-JIS, японский EUC-JP, корейский euc -kr символы установить кодировку и т. д.).
Выполните это в текущем каталоге:
for f in `ls`; do
iconv --from-code=iso-8859-1 --to-code=utf-8 $f -o $f;
done
Я бы сначала проверил, нет ли файла в целевой кодификации, иначе вы можете испортить свои файлы, я думаю. (приведенный ниже пример для zsh) вы можете адаптировать код и поместить его в цикл for.
codification="`file -bi "$1" | awk -F"=" '{print $NF}'`"
[[ "$codification" != "utf-8" ]] && iconv -f ISO8859-1 -t UTF-8 "$1" > $outfile