1. 概述

    1. 使用 shell 替换 文件名中的空格
  2. 背景

    1. 尝试用 find 配合 xargs, 在多个文件里找关键字
    2. 出现了问题
      1. 有空格的文件名, 并不是很好处理
  3. 准备

    1. os

      1. centos7

1. 问题: 文件名中的空格

  1. 场景

    1. 需要在多个文本里, 查找某个关键字
  2. 方法

    1. find 配合 xargs
  3. 问题

    1. 文件名里有空格

      1. 结果

        1. xargs 会把 带有空格的文件名, 当做多个文件
      2. 处理

        1. 使用 -i {} 处理

        2. 结果

          1. 可以找出来了
          2. 但是会丢失 文件名
        3. 所以, 还是得换别的思路来处理

2. 处理思路

1. 思路1: 先打印文件名, 然后再查找

  1. 概述

    1. 打印文件名
    2. 查找
  2. xargs 执行多条命令

    1. 概述

      1. xargs 后面, 可以一次执行多个命令
    2. 命令

      > find . -type f | xargs -i  sh -c 'echo {}; grep "#" {}'
    3. 结果

      1. 还是失败了

        1. 因为 grep 那里, 还是会把 含有空格 的文件名, 分开
        2. 所以还是 写脚本 吧
  3. 脚本

    1. 概述

      1. 将之前的思路, 写到一个脚本里
    2. 脚本

      #!/bin/bash
      # 脚本名字, 叫 script01.sh
      # arg1 是 需要匹配的模式, 参数用 "" 包一下
      # arg2 是 文件名
      echo $2
      grep "$1" "$2"
  4. 最终命令

    1. 命令

      > find . -type f | xargs -i ./script01.sh "#" {}
    2. 结果

      1. 可以正常显示和打印
      2. 问题
        1. 就算没有模式, 文件名 也会被打印
        2. 一定程度上影响了判断

2. 思路2: 批量修改文件名

  1. 概述

    1. 批量修改文件名
    2. 然后直接 grep 查找
  2. 问题: 修改文件名

    1. 如何修改文件名

      1. 思路1: 删除空格

        1. 不行

          1. note1 2 修改后是 note12
          2. 可是如果真的有 note12 怎么办?
      2. 思路2: 替换空格
        1. 使用特殊的字符替换

          1. -
          2. _
          3. 其他合法字符
          4. 注意避免之前的重名问题即可
  3. 脚本

    #!/bin/bash
    # 脚本名 script02.sh
    # $1 是需要修改的文件名
    # 涉及到 shell 的一些 字符串操作, 这个后续会讲 from=$1
    echo $from
    # $from 如果是 find 找出来的, 会含有一个路径, 这个操作的目的, 是去掉 路径, 留下 文件名
    from=${from##*/}
    echo $from
    to=${from// /_}
    echo $to mv "${from}" $to
  4. 最终命令

    1. 命令

      > find . -type f -name "* *" | xargs -i ./script02.sh {}
      > find . -type f | xargs grep "#"
    2. 结果

      1. 还不错

ps

  1. ref

    1. 学习 bash
  2. 其他

    1. 以后命名一定注意, 不会在 文件 和 目录 名称里, 带空格
  3. 后续

    1. shell 字符串截取

Linux - Shell - 替换文件名中的空格的更多相关文章

  1. Linux shell去除字符串中所有空格

    Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'

  2. Shell 处理文件名中包含空格的文件

    最近在学Gradle, 使用git clone 命令下载了一些资料,但是文件名含有空格,看上去不是很舒服,因此想到用shell脚本对其进行批处理,去掉文件名中的空格,注意这里是把所有的空格全去掉 gi ...

  3. response.setHeader("Content-disposition","attachment;filename="+fileName) 下载时文件名中存在空格错误

    最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...

  4. find + xargs + cp 遇到文件名中带空格如何处理

    一,需求为查询文件名为ZRSH开头的时间为7月至今的所有文件并打包 1.首先想到的就是find + xargs + cp  格式.. find 2016073* -type f  -name *ZRS ...

  5. 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题

    解决一下问题: 1.火狐浏览器下载文件,中文变乱码 2.IE浏览器下载文件,丢失文件扩展名或强制扩展名为".txt" 3.浏览器下载文件,文件名中的空格变成加号("+&q ...

  6. Linux shell 提取文件名和目录名的一些方法(转)

    很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等.例如,从路径/dir1/dir2/file.tx ...

  7. 【剑指offer】替换字符串中的空格

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25002199 剑指offer上的第四道题目,在九度OJ上測试通过,但还是有些问题.由于是用 ...

  8. (CSDN迁移) 替换字符串中的空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public ...

  9. JS 剑指Offer(三) 替换字符串中的空格

    请实现一个函数,把字符串 s 中的每个空格替换成"%20". 实现这个函数的方法很简单,在JS中可以直接应用正则表达式,代码如下 直接将全局中的space换成%20,一行代码搞定 ...

随机推荐

  1. idea中MavenWeb项目不能创建Servlet的解决办法

    问题 学习完maven后,用maven创建了一个web项目,然后在这个web项目中创建了一个java文件夹并标记这个目录为源码根目录,当我准备创建一个Servlet的时候发现没有,如下图 解决办法 1 ...

  2. 纪中18日c组模拟赛

    T2 GMOJ2127. 电子表格 (File IO): input:excel.in output:excel.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   ...

  3. 洛谷 UVA11388 GCD LCM

    UVA11388 GCD LCM Description of the title PDF The GCD of two positive integers is the largest intege ...

  4. 吴裕雄--天生自然HADOOP操作实验学习笔记:mapreduce和yarn命令

    实验目的 了解集群运行的原理 学习mapred和yarn脚本原理 学习使用Hadoop命令提交mapreduce程序 学习对mapred.yarn脚本进行基本操作 实验原理 1.hadoop的shel ...

  5. VMware Workstation Pro工具

    安装包 链接:https://pan.baidu.com/s/1n-URb83lHtric3Ds8UbF9Q 提取码:c9z5 密钥 FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7 ...

  6. H5_0024:对于事先无法确定css大小的情况,可以通过JS动态修改

            $(function(){             function Heights(){                 var WinH = $(window).height(); ...

  7. maven发布java-分支构建

    1.安装parameter插件 2. 新建maven项目 3.配置maven项目 4.配置maven项目2 5.配置maven项目3 6. 模拟开发给提交打tag标签 7.版本发布 8.tag获取并构 ...

  8. 自适应阈值化操作:adaptiveThreshold()函数

    在图像阈值化操作中,更关注的是从二值化图像中,分离目标区域和背景区域,但是仅仅通过设定固定阈值很难达到理想的分割效果.而自适应阈值,则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样 ...

  9. MongoDB的批量查询条件进行批量更新数据

    今天遇到这样一个场景:在Java中批量更新MongoDB数据,不过每次更新的条件有不一样,那如何有效地进行更新操作呢? 刚开始的时候,我是想到循环批量更新操作,即每一种查询条件进行一次批量更新过程,这 ...

  10. TCP 与 UDP 浅谈

    TCP与UDP区别总结:1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重 ...