人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

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

發(fā)布日期:2022-05-21 12:27 | 文章來(lái)源:源碼之家

本文主要給大家介紹了關(guān)于Linux shell用sed批量更改文件名的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

示例

去除特定字符

目標(biāo):將 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 $newfile
done

這里使用sed進(jìn)行標(biāo)準(zhǔn)輸出的字符串替換,其通用格式如下:

stdout | sed 's/pattern/replace/'

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

中間插入字符

目標(biāo):將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt

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

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

分析

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

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

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

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

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

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

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

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

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

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

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

ls | grep "*.txt" | while read file
do
 ...
done

使用 find 獲取文件列表

之前的示例中,我們是通過(guò) ls 命令來(lái)獲取文件列表。該命令只能獲取某個(gè)目錄的文件,而且沒(méi)法進(jìn)行多種條件的篩選。

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

用 find 命令來(lái)獲取文件列表,再用 sed 命令配合正則表達(dá)式來(lái)修改文件名,這兩個(gè)命令的結(jié)合幾乎能完成所有常見(jiàn)的批量改名任務(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 $newfile
done

有關(guān) find 命令的更多用法,可以參考 https://www.jb51.net/article/108198.htm

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)本站的支持。

美國(guó)服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶(hù)服務(wù)

7x24全年不間斷在線

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶(hù)咨詢(xún)顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部