我正在尝试创建一个遍历目录并重命名文件的脚本。我希望能够分别提取文件名和文件扩展名,但是如果文件路径中包含空格或瑞典语UTF8字符,则会中断。
我在SO上找到了下面显示的代码片段来提取filename +扩展名,但当我看到它在没有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发布于 2012-01-17 19:08:36
问题是NAUTILUS_SCRIPT_SELECTED_FILE_PATH变量是new-line escaped per item。
您需要使用:
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"发布于 2012-01-17 18:33:15
我在my dotfiles里有这个
# 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©testhttps://stackoverflow.com/questions/8892518
复制相似问题