|
|||||||
Скрипт, который автоматически определяет кодировку файла и открывает редактор с перекодированным файлом
Время создания: 27.04.2019 09:25
Текстовые метки: linux, кодировка, UTF-8, iconv, конвертировано, автоматическое определение, редактор, micro
Раздел: Компьютер - Linux - Bash - Кодировки и локализация
Запись: xintrea/mytetra_syncro/master/base/1556346322qtxqip9q45/text.html на raw.github.com
|
|||||||
|
|||||||
Скрипт открывает консольный редактор micro, предварительно перекодировав файл в кодировку UTF-8. После редактирования файл сохраняется в своей первоначальной кодировке. Для работы скрипта нужно, чтобы существовал каталог /tmp/codePageAutoDetect. Скрипт использует следующие программы: iconv и uchardet. Они должны быть установлены. Файл скрипта: /opt/script/microAuto.sh Соответственно, на редактирование файл открывается командой: /opt/script/microAuto.sh имяФайла Скрипт: #!/bin/bash # В первом параметре $1 должно быть имя файла # Если первый параметр пустой (все пробелы в проверяемой строке удаляются) if [ -z "${1// /}" ] then echo "No filename in parameter" # Просто запускается редактор micro micro exit fi # Если файл не сущесвует if test ! -f "$1"; then echo "File not found"; exit fi # Автоопределение кодировки файла cp=`uchardet "$1"` # echo $cp # Если кодировка не определена или кодировка соответствует системной, # процедуру подмены перекодированного файла запускать не имеет смысла if [[ "$cp" == "ascii/unknown" || "$cp" == "UTF-8" ]] then micro "$1" exit 0 fi workDirName="/tmp/codePageAutoDetect" subDirName=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1` fileDirName=$workDirName/$subDirName shortFileName=`basename "$1"` fullFileName=$fileDirName/$shortFileName filePermission=`stat -c "%a" "$1"` # Создается временный каталог mkdir -p $fileDirName # Во временный каталог копируется редактируемый файл со своим именем cp "$1" "$fullFileName" # Файл во временном каталоге переконвертируется из своей кодировки в UTF-8 iconv -f $cp -t UTF-8 "$fullFileName" -o tmpfile && mv tmpfile "$fullFileName" # Запоминается время последнего изменения, чтобы после срабатывания редактора определять, было ли редактирование modifyTimeBefore=`LC_ALL=C stat "$fullFileName" | grep "^Modify:"` # echo $modifyTimeBefore # Открывается редактор micro "$fullFileName" modifyTimeAfter=`LC_ALL=C stat "$fullFileName" | grep "^Modify:"` # echo $modifyTimeAfter # Если время до редактирования и после редактирования отличаются if test ! "$modifyTimeBefore" = "$modifyTimeAfter"; then # echo "Is modify" # Файл во временном каталоге переконвертируется из UTF-8 в свою кодировку iconv -f UTF-8 -t $cp "$fullFileName" -o tmpfile && mv tmpfile "$fullFileName" # Отредактированный файл переносится поверх исходного mv -f "$fullFileName" "$1" # Отредактированному файлу выставляются прежние права chmod $filePermission "$1" else # echo "Is not modify" rm -f "$fullFileName" fi # Удаляется временный каталог rmdir $fileDirName |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|