- 浏览: 112698 次
文章分类
最新评论
Shell中处理包含空格的文件名的方法。
在处理文件时遇到个问题,当文件名包含空格时,for循环就出问题了。
例如,我在当前文件夹下建立3个文件名包含空格的文件:
然后for循环输出文件名:
可以看到,文件名被分开了。
复制操作也不行:www.jbxue.com
要解决这个问题,当然就要从单词分隔符着手。而bash中使用的是$IFS(Internal Field Separator)这个变量,内容为" \n\t":
然后把它改成"\n\b",记得修改前先保存一下:
现在再执行上述命令就正常了:
最后,别忘了恢复$IFS:
在处理文件时遇到个问题,当文件名包含空格时,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
可以看到,文件名被分开了。
复制操作也不行:www.jbxue.com
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)这个变量,内容为" \n\t":
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
然后把它改成"\n\b",记得修改前先保存一下:
keakons-MacBook-Pro:test keakon$ SAVEIFS=$IFS keakons-MacBook-Pro:test keakon$ IFS=$(echo -en "\n\b")
现在再执行上述命令就正常了:
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 " \n\t") keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1 0000000 20 0a 09 0a 0000004
发表评论
-
linux关机方法:Linux关机与重启命令
2015-03-25 15:57 498linux快速关机技巧:Linux ... -
tp-link路由器设置方法分享
2014-09-09 17:02 602tp-link路由器设置方法收藏 在家里上 ... -
shell脚本:自动发送密码抓取远程日志的方法
2014-08-15 22:38 1403转自:http://www.cnblogs.com/yes ... -
如何查看Linux是32位还是64位的方法?
2014-08-11 06:16 621查看Linux是32位还是64位的方法 ... -
linux输入输出重定向详解(转)
2014-08-11 06:15 1669linux中使用重定向符号可以实现输出输入重定向,默认条件下 ... -
apache rewrite规则白名单配置方法
2014-06-13 16:44 1370如何在apache中使用rewrite规则配置白名单,这里分 ... -
Apache Rewrite重写规则配置
2014-06-13 16:43 77613个实用的Apache Rewrite重写规则,做个记录, ... -
linux 开机启动脚本顺序
2014-03-23 22:25 811linux 开机启动脚本顺序 linux 开机启 ... -
centos 6.3 64位下安装mysql5.5.36
2014-03-20 09:14 638准备如下安装包: 1.MySQL-server-5.5.36 ... -
Linux下磁盘管理命令df与du
2013-07-04 16:06 720对磁盘进行查看和控制的两个linux命令,df和du。 一、 ... -
hdparm--Linux测试硬盘速度的命令
2013-07-04 16:00 1365hdparm 命令 功能说明:显示与设定硬盘的参数。 语法: ... -
linux解压命令tar的用法
2013-06-26 22:52 867tar命令 tar [-cxtzjvfpPN] 文件与目录 . ... -
ssh连接因超时闲置断开的解决方法
2013-06-26 22:51 825如何避免SSH连接因超时闲置断开? 用SSH过程连接时,经常 ... -
找回 linux root密码的几种方法
2013-06-26 22:49 721第1种方法: 1.在系统进入单用户状态,直接用passwd r ... -
linux下/etc/passwd文件选项 中文说明
2013-06-07 07:06 1571/etc/passwd 文件是系统的主要文件之一。该文件中包含 ... -
解决Apache 本地服务器启动后又自动停止的问题
2013-06-07 07:03 876apache本地服务器,启动后又自动停止: setup_inh ... -
apache虚拟主机设置泛域名的方法
2013-06-07 07:01 1366在apache虚拟主机中设置泛域名解析,主要是用到Server ... -
rsync 数据同步使用详解
2013-06-07 06:59 852rsync 是很强大的同步工具。不少project都提供 ht ... -
linux下Squid反向代理搭建CDN缓存服务器的方法详解
2013-06-07 06:57 1674在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信 ... -
Linux的Find命令使用举例
2013-06-01 22:48 1162linux命令之find命令使用举例。 在当前目录和子目录 ...
相关推荐
但是这种命名方式给Linux命令行工具和Shell带来了困扰,因为大多数命令中,都是默认以空格做为值与值之间的分隔符,而不是做为文件名的一部分。 看下面的脚本,我们可以了解的更清楚: 执行的结果如下: 实际上,...
### Shell中处理包含空格的文件名实例 在日常的Shell脚本开发过程中,经常会遇到文件名中包含空格的情况。这种情况下,如果处理不当,可能会导致脚本无法正确识别文件名,从而引发一系列的问题。本文将通过一个具体...
在批量处理音频文件时候使用下面的脚本发现含有空格的文件名并不能被处理; #$1: 遍历的文件夹 rootDir=$1 cd $rootDir allAudioFile=$(find $1 -name *\.mp3) for oneAudioFile in $allAudioFile do mv -f $...
在探讨如何传递包含空格的命令行参数时,我们首先需要理解命令行参数的基本概念以及在实际编程场景中如何正确地处理这些参数。本篇内容将深入解析如何在不同的编程环境中处理带有空格的命令行参数,并通过示例来解决...
这段脚本检查输入的文件名是否以`#`开头,后跟数字,接着是`-`,然后是`docs`、`unittest`、`pseudocode`或以`msg-`开头且不包含空格的字符串。如果不满足这些条件,脚本会输出错误信息。 总结来说,Shell模糊匹配...
在大多数操作系统中,文件名不能包含某些特殊字符,如":"、"/"、"\\"、"|"、"*"、"?"、"\"、">"、"等,因为这些字符在文件系统中具有特殊含义。在本例中,我们关注的是替换文件名中的"#"字符。在某些情况下,"#"可能...
由于自己经常利用浏览器插件下载网页图片,由此产生很多的文件夹和文件,这些文件夹的名字多半是网页的title,导致文件夹名很长,文件名多是些很长的数。感觉这样的状况不是很好就自己用java实现了简单的shell来管理...
#### 处理含有空格的文件名 当文件名中含有空格时,直接使用上述方法可能会导致错误。此时,可以通过改变 `IFS` (Internal Field Separator) 的值来解决这一问题。 ```bash IFS=$'\n' for file in $(ls) do # ...
其次,该函数使用trim函数来删除文件名中的空格和其他特殊字符,但是该函数也没有正确地处理特殊字符的情况。 漏洞利用 攻击者可以通过上传一个特殊构造的文件来利用该漏洞。例如,攻击者可以上传一个名为"1.jpg?p...
此外,shell 中 = 变量不允许有空格,而 Makefile 中 = 两边允许有空格。这两种语法的不同使得它们在不同的环境中使用。 在 Makefile 中,shell 语法有一些特殊性。例如,在 Makefile 文件的目标项冒号后的另起一行...
首先,"shell(含cd).c"和"shell.c"这两个文件名暗示了我们要实现的是一个包含`cd`命令功能的shell模拟器。`cd`命令是改变工作目录的命令,它是shell中的核心组成部分,用于在文件系统中导航。 **模拟shell程序的...
1. `$0`: 这个变量存储的是当前正在执行的shell脚本的文件名。它对于调试和识别脚本来源非常有用,特别是在编写复杂的shell程序时。 2. `$n` (n为数字): 这些变量用于访问传递给脚本或函数的参数。例如,`$1`表示第...
Shell学习第一章主要涵盖了Shell脚本语言的基础知识,包括Shell的介绍、基本语法、变量和字符串操作等内容。以下是对这些知识点的详细阐述: 1. **Shell介绍**:Shell是一种命令行解释器,它允许用户与操作系统进行...
3. 对包含空格和其他特殊字符的字符串要用引号括起来 使用[ ] 或者(( ))表达式乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出;let命令运算,并...