zoukankan      html  css  js  c++  java
  • Linux

    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 字符串截取
  • 相关阅读:
    MySql数据类型详解
    MySQL日期数据类型、MySQL时间类型使用总结
    sqlcmd
    sqlserver 复制
    Do waiting or suspended tasks tie up a worker thread?
    用GDB 调试Java程序
    X64相关文章
    How do I find what queries were executing in a SQL memory dump?-----stack
    解决Sublime Text 3中文显示乱码(tab中文方块)问题
    GIT 详解
  • 原文地址:https://www.cnblogs.com/xy14/p/12217877.html
Copyright © 2011-2022 走看看