Bash文件名中包含空格的处理方法

遇到问题

文件或目录名带有空格,例如 “解决VM Workstation安装VMware Tools显示灰色的办法.md”。利用下面命令处理文件时,报错如下:

1
2
3
4
5
6
7
$ ls
解决VM Workstation安装VMware Tools显示灰色的办法.md

$ for i in `find . -type f`;do echo $i;done
./解决VM
Workstation安装VMware
Tools显示灰色的办法.md

如上所示,shell 中把 解决VM Workstation安装VMware Tools显示灰色的办法.md 文件解析成了三个文件。

原因

因为在 Bash 中,环境变量 IFS 的默认值将\n\t空格、回车、Tab,作为值与值之间的分隔符,而不是作为文件名的一部分。

IFS 的 man page 描述如下:

1
man bash

IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is “‘’.

解决方法

通过修改 IFS 的值修改默认的分隔符

1
2
3
4
5
6
7
8
9
10
# 保存 IFS 的默认值
DEFAULT_IFS=$IFS
# 设置 \n 作为默认分隔符
IFS=$(echo -en "\b")

# 处理需要的内容
do something

# 还原 IFS 分隔符
IFS=$DEFAULT_IFS

echo 的 -e ,启动反斜杠转移(默认是disable的)

-n ,不输出结尾换行符

\b ,回车符

参考内容

Linux shell 技巧:对文件名中包含空格的处理方法
Shell中处理包含空格的文件名实例

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信