当前位置:  操作系统/服务器>linux

Shell中处理包含空格的文件名实例

    来源: 互联网  发布时间:2014-10-16

    本文导语:  今天在处理文件时遇到个问题,当文件名包含空格时,for循环就出问题了。 例如,我在当前文件夹下建立3个文件名包含空格的文件: 代码如下:keakons-MacBook-Pro:test keakon$ touch "test 1"keakons-MacBook-Pro:test keakon$ touch "test 2"keakons-MacBoo...

今天在处理文件时遇到个问题,当文件名包含空格时,for循环就出问题了。

例如,我在当前文件夹下建立3个文件名包含空格的文件:

代码如下:
keakons-MacBook-Pro:test keakon$ touch "test 1"
keakons-MacBook-Pro:test keakon$ touch "test 2"
keakons-MacBook-Pro:test keakon$ touch "test 3"
keakons-MacBook-Pro:test keakon$ ls
test 1 test 2 test 3

然后for循环输出文件名:
代码如下:
keakons-MacBook-Pro:test keakon$ for file in `ls`;
> do echo $file;
> done
test
1
test
2
test
3

可以看到,文件名被分开了。

复制操作也不行:

代码如下:
keakons-MacBook-Pro:test keakon$ mkdir ../bak
keakons-MacBook-Pro:test keakon$ for file in `ls`; do cp "$file" ../bak; done
cp: bak is a directory (not copied).
cp: test: No such file or directory
cp: 1: No such file or directory
cp: test: No such file or directory
cp: 2: No such file or directory
cp: test: No such file or directory
cp: 3: No such file or directory

要解决这个问题,当然就要从单词分隔符着手。而bash中使用的是$IFS(Internal Field Separator)这个变量,内容为" nt":

代码如下:
keakons-MacBook-Pro:test keakon$ echo $IFS

keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1
0000000    20  09  0a  0a                                               
0000004
keakons-MacBook-Pro:test keakon$ echo "" | od -t x1
0000000    0a                                                           
0000001

然后把它改成"nb",记得修改前先保存一下:

代码如下:
keakons-MacBook-Pro:test keakon$ SAVEIFS=$IFS
keakons-MacBook-Pro:test keakon$ IFS=$(echo -en "nb")

现在再执行上述命令就正常了:

代码如下:
keakons-MacBook-Pro:test keakon$ for file in `ls`; do echo $file; done
test 1
test 2
test 3
keakons-MacBook-Pro:test keakon$ for file in `ls`; do cp "$file" ../bak; done
keakons-MacBook-Pro:test keakon$ ls ../bak
test 1 test 2 test 3

最后,别忘了恢复$IFS:

代码如下:
keakons-MacBook-Pro:test keakon$ IFS=$SAVEIFS
keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1
0000000    20  09  0a  0a                                               
0000004
keakons-MacBook-Pro:test keakon$ IFS=$(echo -en " nt")
keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1
0000000    20  0a  09  0a                                               
0000004

    
 
 

您可能感兴趣的文章:

  • 问一个关于在shell中调用内置命令时参数的问题?参数从空格处被断开
  • shell 参数数目不固定如何遍历(主要原因是包含带空格的参数)
  • linux系统在shell中用while读取文件分隔符tab键转空格???
  • shell script 读文件赋值 遇到空格被分节
  • Shell处理带空格的文件名的方法
  • shell trim 去掉字符串两边的空格,不去掉中间的 怎么做?
  • shell 按当前时间作为文件名建立文件夹
  • .net/c#/asp.net iis7站长之家
  • 如何删除目录中文件名小于某个字符串的所有文件 shell
  • [求助]一个shell查询文件名的问题
  • 怎么用shell创建连续文件名的文件??
  • Shell获取文件的文件名和扩展名的例子
  • shell,如何遍历出指定位置包含指定字符串的文件名?
  • 如何写shell脚本 把文件移到文件名对应的文件夹
  • 怎么用shell把文件名中一些字符去掉
  • 在shell下,如何获得一个目录下的文件名?
  • 在C SHELL中,如何判断在某一指定目录下是否有已知文件名存在?
  • shell 获取解压后的文件名
  • 求一个批量改文件名的shell,谢谢。
  • 如何用shell获取linux目录下的文件名呢?
  • 求助 shell中split命令如何实现文件分割 并统计分割文件个数。分割完之后,命名方式从 文件名.001 开始
  • 如何用shell脚本实现根据当前文件名生成新文件
  • SHELL脚本修改文件名移动到指定文件夹
  • Linux shell script输出文件名
  • shell创建一个带参数的文件名,这个参数怎么不显示出来backup$BDATE.dump
  • 新手请问,检查某个指定文件是否存在于opt目录下,如果存在则把该文件名保存到文本文件里,用Shell脚本如何写?请简写代码供参,谢谢。PM5
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • C++实现简单的希尔排序Shell Sort实例
  • linux bash shell中case语句的实例
  • 如何使用shell脚本替换不确定文本信息?实例!
  • Linux命令编辑器Shell编程实例大全 下载
  • shell监控脚本实例—监控mysql主从复制
  • Shell中的循环语句for、while、until实例讲解
  • 通过实例深入理解linux shell数组
  • linux shell流程控制语句实例讲解(if、for、while、case语句实例)
  • shell中的循环语句、判断语句实例
  • 总结的7个shell字符串操作方法和实例分享
  • shell数组常用实例分享
  • Shell脚本test命令使用总结和实例
  • Shell多线程操作及线程数控制实例
  • Shell脚本处理浮点数的运算和比较实例
  • shell编程实例研讨:有兴趣者请进!
  • shell常用重定向实例讲解
  • shell使用mysqld_multi自动做多实例从库脚本
  • Shell脚本编程中常用的数学运算实例
  • 备份shell脚本实例代码
  • shell脚本连接、读写、操作mysql数据库实例
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • shell变量和子shell的问题请教


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3