首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash中使用UTF字符

在bash中使用UTF字符
EN

Stack Overflow用户
提问于 2012-01-17 17:50:26
回答 2查看 2.3K关注 0票数 1

我正在尝试创建一个遍历目录并重命名文件的脚本。我希望能够分别提取文件名和文件扩展名,但是如果文件路径中包含空格或瑞典语UTF8字符,则会中断。

我在SO上找到了下面显示的代码片段来提取filename +扩展名,但当我看到它在没有UTF字符或空格的路径上工作时,我认为我没有正确地转义我的变量。

也许我做错了什么。关于如何使用UTF8字符和空格处理路径,您有什么想法吗?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-17 19:08:36

问题是NAUTILUS_SCRIPT_SELECTED_FILE_PATH变量是new-line escaped per item

您需要使用:

代码语言:javascript
复制
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"
票数 2
EN

Stack Overflow用户

发布于 2012-01-17 18:33:15

我在my dotfiles里有这个

代码语言:javascript
复制
# Prefer US English and use UTF-8
export LC_ALL="en_US.UTF-8"
export LANG="en_US"

在这种配置下,它似乎是有效的:

代码语言:javascript
复制
$ 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8892518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档