成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Linuxshell利用sed批量更改文件名的方法-創(chuàng)新互聯(lián)

小編給大家分享一下Linux shell利用sed批量更改文件名的方法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

在象山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,全網(wǎng)營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),象山網(wǎng)站建設(shè)費用合理。

示例

去除特定字符

目標(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用于替換所有匹配項,而不僅僅替換第一個匹配項。

中間插入字符

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

分析

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

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

注意 for 循環(huán)后面的 ls | grep .txt,這條命令用兩個反單引號括了起來,與 $(ls | grep .txt) 的作用相同,被包圍的字符串會被當(dāng)作命令執(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 file
do
 ...
done

使用 find 獲取文件列表

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

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

用 find 命令來獲取文件列表,再用 sed 命令配合正則表達(dá)式來修改文件名,這兩個命令的結(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 $newfile
done

看完了這篇文章,相信你對“Linux shell利用sed批量更改文件名的方法”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享標(biāo)題:Linuxshell利用sed批量更改文件名的方法-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://jinyejixie.com/article26/dhdsjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)、面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化網(wǎng)站內(nèi)鏈、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
西充县| 旌德县| 个旧市| 绥中县| 方正县| 疏勒县| 泸溪县| 绍兴市| 台南市| 九江县| 临泽县| 祁阳县| 阿鲁科尔沁旗| 广水市| 额敏县| 东山县| 宣威市| 和静县| 唐山市| 建昌县| 江门市| 丹江口市| 涿鹿县| 东乡| 烟台市| 博兴县| 石泉县| 新闻| 孟连| 乳源| 洛阳市| 扎兰屯市| 湖州市| 宁化县| 开封市| 永新县| 荥阳市| 抚顺市| 西畴县| 平阳县| 万山特区|