Linux - Shell - 替換文件名中的空格


  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 字符串截取


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM