国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

Linux shell利用sed如何批量更改文件名詳解

2024-09-05 23:04:11
字體:
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于Linux shell/262160.html">shell用linux/220607.html">sed批量更改文件名的相關(guān)內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

示例

去除特定字符

目標:將 2017-01-01.jpg、2018-01-01.jpg 改為 20170101.jpg、20180101.jpg

方法:將所有 - 替換為空

for file in `ls | grep .jpg`do newfile=`echo $file | sed 's/-//g'` mv $file $newfiledone

這里使用sed進行標準輸出的字符串替換,其通用格式如下:

stdout | sed 's/pattern/replace/'

上述示例中,在末尾添加g用于替換所有匹配項,而不僅僅替換第一個匹配項。

中間插入字符

目標:將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt

方法:用分組匹配分別獲取待插入位置兩側(cè)的字符串,再通過反向引用實現(xiàn)替換

for file in `ls | grep .txt`do newfile=`echo $file | sed 's//([a-z]/+/)/([0-9]/+/)//1-/2/'` mv $file $newfiledone

分析

上述示例首先通過 ls 和 grep 命令得到待改名的文件列表,然后用 sed 命令進行字符串的替換,最后再使用 mv 命令來完成文件名的更改。

獲取待改名文件列表的方法有很多,可以通過 find 命令,也可以直接給出字符串,我們將在下文中提到。

注意 for 循環(huán)后面的 ls | grep .txt,這條命令用兩個反單引號括了起來,與 $(ls | grep .txt) 的作用相同,被包圍的字符串會被當作命令執(zhí)行,然后返回字符串結(jié)果。

文件名包含空格的解決方法

我們可以直接將文件列表寫到 for 循環(huán)中,而不是通過命令來得到,例如:

for file in "file1 file2 file3"do ...done

可以看到 for 循環(huán)是通過空格來分割字符串,因此如果待更改的文件名中包含空格的話,就會被拆分成多個文件名,從而出錯。

要解決這個問題,我們可以將 IFS(內(nèi)部字段分隔符)設(shè)置為換行符 /n,這樣一來,for 循環(huán)就會按行來獲取變量的值,確保每次獲取的確實是一個完整的文件名。

設(shè)置 IFS 變量的命令需要放在 for 循環(huán)之前:

IFS=$'/n'for file in `ls`do ...done

也可以直接使用 while read 命令一次讀取一行到變量 file 中:

ls | grep "*.txt" | while read filedo ...done

使用 find 獲取文件列表

之前的示例中,我們是通過 ls 命令來獲取文件列表。該命令只能獲取某個目錄的文件,而且沒法進行多種條件的篩選。

而一說到文件的查找,不得不提到功能強大的 find 命令。該命令可以在多個層次的目錄中查找文件,并能夠設(shè)定諸如創(chuàng)建時間、文件大小、所有者等多種條件,查找起文件來特別方便靈活。

用 find 命令來獲取文件列表,再用 sed 命令配合正則表達式來修改文件名,這兩個命令的結(jié)合幾乎能完成所有常見的批量改名任務(wù)。

例如,將所有大于1M,且后綴為txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名為 20170101-book.txt、20170101-image.jpg,代碼如下:

for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`do newfile=`echo $file | sed 's//([a-z]/+/)_/([0-9]/+/).//2-/1./'` mv $file $newfiledone

 

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桦南县| 勃利县| 红河县| 红原县| 宕昌县| 山东省| 彩票| 韩城市| 昌图县| 德化县| 逊克县| 望江县| 尉犁县| 千阳县| 荆门市| 舟曲县| 临泽县| 乌鲁木齐市| 抚松县| 玛曲县| 绥芬河市| 神木县| 莒南县| 策勒县| 滨海县| 渭源县| 枣庄市| 监利县| 简阳市| 普定县| 冀州市| 元朗区| 观塘区| 太康县| 宝应县| 巫山县| 措勤县| 平谷区| 浦东新区| 双牌县| 六枝特区|