Shell处理带空格的文件名的方法

2014-02-14  来源:本站原创  分类:linux shell  人气:19 

这篇文章主要介绍了Shell处理带空格的文件名的方法,文中总结了若干处理带空格的文件名的技巧,需要的朋友可以参考下

现在很多人命名的时候都喜欢用空格,例如“An Introduction.doc”。但是这种命名方式给Linux命令行工具和Shell带来了困扰,因为大多数命令中,都是默认以空格做为值与值之间的分隔符,而不是做为文件名的一部分。

看下面的脚本,我们可以了解的更清楚:

Shell处理带空格的文件名的方法

执行的结果如下:

Shell处理带空格的文件名的方法

实际上,当前目录的文件只有两个:

Shell处理带空格的文件名的方法

对于简单的文件名,如上例中,我们也可以通过 for i in *doc 这样简单的方法来获得文件列表。但是对于复杂的环境,如下图,我们如何获得这些列表呢?

Shell处理带空格的文件名的方法

有一个办法,通过 for i in "* *" 可以获得文件名的列表,但是一个很糟糕的列表,因为这个结果是一个两个文件名在一起的列表,我们完全无法拿来做后续的操作,如下图所示

Shell处理带空格的文件名的方法

通过 "*\ *" 这样的技巧可以避免上面所说的问题,但是在应用mv或其他操作时,还是会出现问题。

Shell处理带空格的文件名的方法

上面的问题,可以通过将变量放入引号中("$i")解决,通常情况下,引号中的空格可以被正确的处理。但这并不是一个恒久的解决办法,因为我们无法处理管道、子Shell等复杂的情况。

一个终极的解决办法就是设置IFS(the Internal Field Separator),不要用空格做为IFS,选择其他的符号。先来看看man page:

IFS: The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read built-in command. The default value is “<space><tab><new-line>”.

Shell处理带空格的文件名的方法

另外一个办法就是在对文件名进行处理之前,先将空格替换为特殊的自定义符号,然后在处理结束的时候,再替换回来

safename="$(echo name | sed 's/ /_-_/g')"

original="$(echo $safename | sed s'/_-_/ /g')"

其他还有一些方法,例如利用find命令。

Shell处理带空格的文件名的方法

相关文章
  • Shell处理带空格的文件名的方法 2014-02-14

    这篇文章主要介绍了Shell处理带空格的文件名的方法,文中总结了若干处理带空格的文件名的技巧,需要的朋友可以参考下 现在很多人命名的时候都喜欢用空格,例如"An Introduction.doc".但是这种命名方式给Linux命令行工具和Shell带来了困扰,因为大多数命令中,都是默认以空格做为值与值之间的分隔符,而不是做为文件名的一部分. 看下面的脚本,我们可以了解的更清楚: 执行的结果如下: 实际上,当前目录的文件只有两个: 对于简单的文件名,如上例中,我们也可以通过 for i

  • shell 编程中空格的使用方法 2014-06-17

    这篇文章主要介绍了shell 编程中空格的使用方法,需要的朋友可以参考下 1.定义变量时, =号的两边不可以留空格.eg: gender=femal----right gender =femal---?wrong gender= femal---?wrong 2.条件测试语句 [ 符号的两边都要留空格.eg: if [ $gender = femal ]; then---right. echo "you are femal"; fi if[ $gender...------------

  • Shell中处理包含空格的文件名实例 2014-10-27

    这篇文章主要介绍了Shell中处理包含空格的文件名实例,需要的朋友可以参考下 今天在处理文件时遇到个问题,当文件名包含空格时,for循环就出问题了. 例如,我在当前文件夹下建立3个文件名包含空格的文件: keakons-MacBook-Pro:test keakon$ touch "test 1" keakons-MacBook-Pro:test keakon$ touch "test 2" keakons-MacBook-Pro:test keakon$ touc

  • shell中的各种括号的使用方法 2014-03-23

    这篇文章主要介绍了shell中的各种括号的使用方法,需要的朋友可以参考下 在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string},${var:=string},${var:?string} 5.$((exp)) 6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern) 现在分述如下

  • shell去掉文件中空行(空白行)的方法详解 2014-04-06

    最近要查看的日志文件提取后有很多空行,不利于以前的文件可以进行比较了,为了向下兼容,只能取得时候把空行删除掉 本文详细介绍了使用shell去除文件中的空行的方法,学习下sed.awk.shell文件检测的方法,有需要的朋友可以作个参考. 本节内容: shell去掉文件中空行 1,shell 去掉文件中的空行 cat filename | sed -e '/^$/d' > filename 2,保留最新的9个文件,其它的文件删除的命令语句 复制代码 代码如下: ls -t | awk '{if(N

  • Linux shell脚本编程if语句的使用方法(条件判断) 2014-12-17

    这篇文章主要介绍了Linux shell脚本编程if语句的使用方法,大家参考使用吧 if 语句格式 if 条件 then Command else Command fi 别忘了这个结尾 If语句忘了结尾fi test.sh: line 14: syntax error: unexpected end of fi if 的三种条件表达式 if command then if 函数 then 命令执行成功,等于返回0 (比如grep ,找到匹配) 执行失败,返回非0 (grep,没找到匹配) if

  • C++实现读取特定路径下文件夹及文件名的方法 2014-10-02

    这篇文章主要介绍了C++实现读取特定路径下文件夹及文件名的方法,需要的朋友可以参考下 本文所述实例代码主要实现读取给定路径下的所有文件夹名称或所有带后缀的文件名的功能.具体解决方法如下: 主要用到了以下几个头文件(类):io.h, fstream, string. 首先,读取某给定路径下所有文件夹与文件名称,并带完整路径.实现代码如下: void getAllFiles( string path, vector<string>& files) { //文件句柄 long hFile =

  • java中javamail发送带附件的邮件实现方法 2014-10-19

    这篇文章主要介绍了java中javamail发送带附件的邮件实现方法,较为详细的分析了JavaMail发送邮件的用法,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载.目前最新版本

  • json数据处理技巧(字段带空格.增加字段.排序等等) 2014-11-30

    json数据处理技巧例如:正常取值.字段带空格.赋值.增加字段.排序.拷贝.数组添加和删除等,详细请参考本文或许对你有所帮助 1.json数据的正常取值:json[i].fieldName 2.json数据的字段带空格:eval('json[' + i + ']["' + field + '"]') 3.json数据的赋值:eval('json[' + i + ']["' + field + '"]=' + jsonFilter.length); 4.json数据增

  • java 文件名截取方法 2013-10-04

    在实际开发应用中会应到截取文件名,本文将介绍java中文件名的截取,需要了解的朋友可以参考下 1.截取不带后缀的文件名 String resourceName=resourceSearchBean.getFileName(); if(StringHelper.isNotEmpty(resourceName)&&resourceName.length()>0); { int dot = resourceName.lastIndexOf('.'); if ((dot >-1) &a

  • Bash Shell 注释多行的几种方法 2013-11-03

    这篇文章主要介绍了Bash Shell注释多行的几种方法,需要的朋友可以参考下 1.最简单方法 :<<BLOCK ....注释内容 BLOCK 把输入重定义到前面的命令,但是 : 是空命令,所以就相当于注释了. 如果注释中有反引号的命令就会报错,反引号部分不会被注释掉,例如 var=`ls -l` 就不会被注释掉. 2.解决注释中有反引号的问题 A.方法一 复制代码 代码如下: :<<BLOCK' ....注释内容 'BLOCK B.方法二 复制代码 代码如下: :<<

  • Java中去除字符串中所有空格的几种方法 2013-11-11

    这篇文章介绍了Java中去除字符串中所有空格的几种方法,有需要的朋友可以参考一下 JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " hell o "; String str2 = str.replaceAll(" ", ""); System.out.println(s

  • C#使用smtp发送带附件的邮件实现方法 2013-11-21

    这篇文章主要介绍了C#使用smtp发送带附件的邮件实现方法,可直接将string类型结果保存为附件,实例中备有相应的注释便于理解,需要的朋友可以参考下 本文实例讲述了C#使用smtp发送带附件的邮件实现方法.可直接将string类型结果保存为附件.分享给大家供大家参考.具体分析如下: 该方式直接保存为HTML文件,也可以是文本文件,其它格式效果不是很好 MailMessage mmsg = new MailMessage(); mmsg.Subject = "邮件标题"; mmsg.B

  • destoon调用discuz论坛中带图片帖子的实现方法 2013-11-24

    这篇文章主要介绍了destoon调用discuz论坛中带图片帖子的实现方法,是destoon开发中非常实用的一个技巧,需要的朋友可以参考下 在destoon开发中有时候我们需要调用论坛的帖子,但是带有图片的帖子该怎么调用出来呢,本文就来实例展示一个可以调用discuz论坛带图片的帖子的方法: 标签代码如下: <!--{php $tags=tag("table=pre_forum_thread i,pre_forum_threadimage t&prefix=&conditi

  • php从完整文件路径中分离文件目录和文件名的方法 2014-01-23

    这篇文章主要介绍了php从完整文件路径中分离文件目录和文件名的方法,涉及php中basename及dirname函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php从完整文件路径中分离文件目录和文件名的方法.分享给大家供大家参考.具体分析如下: basename()函数用于从路径中获得文件名 dirname()函数用于从路径中获得文件目录 <?php $full_name = 'c:\wamp\php\php.ini'; $base = basename($full_

  • php中替换字符串中的空格为逗号','的方法 2014-02-13

    这篇文章主要介绍php中替换字符串中的空格为逗号,的方法.感觉还不错,大家可以参考下 今天在网查到一篇介绍php中替换字符串中的空格为逗号','的文章,作个日记保存下来. <pre name="code" class="php"><? php /* * 关键词中的空格替换为',' */ public function emptyreplace($str) { $str = str_replace(' ', ' ', $str); //替换全角空格为

  • Shell脚本中获取进程ID的方法 2014-04-07

    这篇文章主要介绍了Shell脚本中获取进程ID的方法,我想要知道运行中脚本子shell的进程id,我该如何在shell脚本中得到PID,阅读本文即可找到你想要答案,需要的朋友可以参考下 提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中的子she

  • Shell脚本判断IP地址是否合法的方法 2014-05-11

    这篇文章主要介绍了Shell脚本判断IP地址是否合法的方法,需要的朋友可以参考下 使用shell校验IP地址合法性 使用方法: [[email protected] python]# bash check_ip.sh IP地址 执行结果:返回值0校验合法,非0不合法. shell代码: 复制代码 代码如下: [[email protected] python]# vi check_ip.sh #!/usr/bin/sh CheckIPAddr() { echo $1|grep "^[0-9]\{1,3\}\.\([0-9]\{

  • Shell脚本中让进程休眠的方法(sleep用法) 2014-05-28

    这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒.若干分钟.若干小时,需要的朋友可以参考下 有时候写Shell的脚本,用于顺序执行一系列的程序. 有些程序在停止之后并没能立即退出,就例如有一个 tomcat 挂了,就算是用 kill -9 命令也还没瞬间就结束掉. 这么如果 shell 还没等其退出就接着执行下一行,这么就出乱子了. 刚知道了原来 shell 也能有 sleep 的参数. sleep 1 睡眠1秒 sleep 1s 睡眠1秒

  • Shell逐行读取文件的4种方法 2014-05-29

    这篇文章主要介绍了Shell逐行读取文件的4种方法,本文介绍了while循环法.重定向法.管道法.文件描述符法等一些方法,需要的朋友可以参考下 在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. 方法1:while循环中执行效率最高,最常用的方法. function while_read_LINE_bottm(){ While read LINE