Linux Shell 替換檔名中的空格

2022-01-11 13:43:59 字數 1679 閱讀 1166

概述

使用 shell 替換 檔名中的空格

背景嘗試用 find 配合 xargs, 在多個檔案裡找關鍵字

出現了問題

有空格的檔名, 並不是很好處理

準備os

centos7

場景需要在多個文字裡, 查詢某個關鍵字

方法find 配合 xargs

問題檔名裡有空格

結果xargs 會把 帶有空格的檔名, 當做多個檔案

處理使用 -i {} 處理

結果可以找出來了

但是會丟失 檔名

所以, 還是得換別的思路來處理

概述列印檔案名

查詢xargs 執行多條命令

概述xargs 後面, 可以一次執行多個命令

命令

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

結果還是失敗了

因為 grep 那裡, 還是會把 含有空格 的檔名, 分開

所以還是 寫指令碼 吧

指令碼概述

將之前的思路, 寫到乙個指令碼裡

指令碼

#!/bin/bash

# 指令碼名字, 叫 script01.sh

# arg1 是 需要匹配的模式, 引數用 "" 包一下

# arg2 是 檔名

echo $2

grep "$1" "$2"

最終命令

命令

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

結果可以正常顯示和列印

問題就算沒有模式, 檔名 也會被列印

一定程度上影響了判斷

概述批量修改檔名

然後直接 grep 查詢

問題: 修改檔名

如何修改檔名

思路1: 刪除空格

不行note1 2 修改後是 note12

可是如果真的有 note12 怎麼辦?

思路2: 替換空格

使用特殊的字元替換

-

_其他合法字元

注意避免之前的重名問題即可

指令碼

#!/bin/bash

# 指令碼名 script02.sh

# $1 是需要修改的檔名

# 涉及到 shell 的一些 字串操作, 這個後續會講

from=$1

echo $from

# $from 如果是 find 找出來的, 會含有乙個路徑, 這個操作的目的, 是去掉 路徑, 留下 檔名

from=$

echo $from

to=$

echo $to

mv "$" $to

最終命令

命令

> find . -type f -name "* *" | xargs -i ./script02.sh {}

> find . -type f | xargs grep "#"

結果還不錯

ref學習 bash

其他以後命名一定注意, 不會在 檔案 和 目錄 名稱裡, 帶空格

後續shell 字串擷取

python 批量替換檔名

你要是這樣學習看到這種噁心不,需求來了,批量替換檔名 movie name os.listdir h 妙味課堂 獲取所有的檔名列表 去掉node ts koa vue 程式設計開發 2018最新node ts koa vue 全棧開發 前後端 完結 0,1項還有最後一項跟這個無關 moview na...

修改檔名稱或者替換檔名中的內容

import osdef putname path,flag,oldname,newname 修改檔名稱或者替換檔名中的內容 dirlist os.listdir path for i in dirlist if i.startswith continue newpath os.path.join ...

python批量替換檔名中的共同字元

lesson 1 2 單詞解讀.mp4 1 2 單詞解讀.mp4 如下 coding utf 8 import os 獲得資料夾下檔名列表 path r g baidunetdiskdownload 第1冊 path unicode path,utf8 file list os.listdir pa...