Работа с UTF-символами в bash - PullRequest
1 голос
/ 17 января 2012

Я пытаюсь создать скрипт, который просматривает каталог и переименовывает файлы. Я хотел бы иметь возможность извлекать имя файла и расширение файла отдельно, но если путь к файлу содержит пробелы или шведские символы UTF8, такие как ÅÄÖ, он ломается.

Я нашел приведенный ниже фрагмент для извлечения имени файла и расширения здесь на SO, но, поскольку я вижу, что он работает на путях без UTF-символов или пробелов, я думаю, что я не экранировал должным образом мои переменные .

Возможно, я делаю что-то не так. Любые идеи о том, что я могу сделать, чтобы это работало с путями с UTF8-символами и пробелами?

for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do

  FULLPATH="$file"
  FILENAME=${FULLPATH##*/}
  FILEEXTENSION=${FILENAME##*.}
  BASEDIRECTORY=${FULLPATH%$FILENAME}

  #Log the vars for debugging
  echo "$FULLPATH" >> ~/Desktop/log.txt
  echo "$FILENAME" >> ~/Desktop/log.txt
  echo "$FILEEXTENSION" >> ~/Desktop/log.txt
  echo "$BASEDIRECTORY" >> ~/Desktop/log.txt

done

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Проблема в том, что переменная NAUTILUS_SCRIPT_SELECTED_FILE_PATH равна экранированной новой строки для элемента .

Вам необходимо использовать:

while read file; do

  FULLPATH="$file"
  FILENAME=${FULLPATH##*/}
  FILEEXTENSION=${FILENAME##*.}
  BASEDIRECTORY=${FULLPATH%$FILENAME}

  #Log the vars for debugging
  echo "$FULLPATH" >> ~/Desktop/log.txt
  echo "$FILENAME" >> ~/Desktop/log.txt
  echo "$FILEEXTENSION" >> ~/Desktop/log.txt
  echo "$BASEDIRECTORY" >> ~/Desktop/log.txt

done <<<"$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
0 голосов
/ 17 января 2012

У меня есть это в моих точечных файлах :

# Prefer US English and use UTF-8
export LC_ALL="en_US.UTF-8"
export LANG="en_US"

С такой конфигурацией, похоже, работает:

$ ls -l
total 0
drwxr-xr-x  2 Mathias  staff  68 Jan 17 11:32 test space test
drwxr-xr-x  2 Mathias  staff  68 Jan 17 11:29 test©test
$ for file in *; do echo "$file"; done
test space test
test©test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...