最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年09月19日 11:37:41   作者:Wray Zheng  
最近在學(xué)習(xí)shell,為了練習(xí)sed,寫了個(gè)簡單的批量修改文件名的腳本,所以下面這篇文章主要給大家介紹了關(guān)于Linux shell利用sed如何批量更改文件名的相關(guān)資料,需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

本文主要給大家介紹了關(guān)于Linux shell用sed批量更改文件名的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(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è)的字符串,再通過反向引用實(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

分析

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

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

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

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

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

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

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

要解決這個(gè)問題,我們可以將 IFS(內(nèi)部字段分隔符)設(shè)置為換行符 \n,這樣一來,for 循環(huán)就會(huì)按行來獲取變量的值,確保每次獲取的確實(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 獲取文件列表

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

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

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

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

總結(jié)

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

相關(guān)文章

  • linux命令如何查看jvm堆內(nèi)存信息

    linux命令如何查看jvm堆內(nèi)存信息

    這篇文章主要介紹了linux命令如何查看jvm堆內(nèi)存信息方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • linux tail 查看日志文件方法

    linux tail 查看日志文件方法

    這篇文章給大家分享了linux tail 查看日志文件方法,有興趣和需要的朋友們可以參考學(xué)習(xí)下。
    2018-07-07
  • Linux 系統(tǒng)下安裝JDK1.8的教程詳解

    Linux 系統(tǒng)下安裝JDK1.8的教程詳解

    這篇文章主要介紹了Linux 系統(tǒng)下安裝JDK1.8的教程詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Linux crontab定時(shí)任務(wù)執(zhí)行失敗處理方案

    Linux crontab定時(shí)任務(wù)執(zhí)行失敗處理方案

    這篇文章主要介紹了Linux crontab定時(shí)任務(wù)執(zhí)行失敗處理方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Linux下NOGUI快速使用Jmeter的兩種實(shí)現(xiàn)方式

    Linux下NOGUI快速使用Jmeter的兩種實(shí)現(xiàn)方式

    文章介紹了在Linux環(huán)境下使用Jmeter進(jìn)行無GUI測試的兩種快速啟動(dòng)方法:直接下載安裝包啟動(dòng)和使用docker啟動(dòng),詳細(xì)描述了每種方法的步驟,并強(qiáng)調(diào)了執(zhí)行命令和查看報(bào)告的過程
    2025-02-02
  • linux系統(tǒng)安裝git及git常用命令

    linux系統(tǒng)安裝git及git常用命令

    這篇文章主要介紹了linux系統(tǒng)安裝git及git常用命令,大家參考使用吧
    2014-01-01
  • Linux自動(dòng)化構(gòu)建工具make和Makefile詳解

    Linux自動(dòng)化構(gòu)建工具make和Makefile詳解

    這篇文章主要介紹了Linux如何自動(dòng)化構(gòu)建工具make和makefile,文章中有詳細(xì)的圖片示例,對學(xué)習(xí)有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2023-04-04
  • linux: centos設(shè)置ip以及連接外網(wǎng)的方法

    linux: centos設(shè)置ip以及連接外網(wǎng)的方法

    本篇文章主要介紹了linux: centos設(shè)置ip以及連接外網(wǎng)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 一行代碼教你如何隱藏Linux進(jìn)程

    一行代碼教你如何隱藏Linux進(jìn)程

    這篇文章主要介紹了一行代碼教你如何隱藏Linux進(jìn)程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Linux中實(shí)時(shí)查看日志的三種方法

    Linux中實(shí)時(shí)查看日志的三種方法

    本文介紹了Linux中實(shí)時(shí)查看日志的三種方法:使用tail命令(結(jié)合-f選項(xiàng)和grep進(jìn)行過濾),利用multitail工具實(shí)現(xiàn)多日志文件的拆分視圖監(jiān)控,以及用less命令的+F選項(xiàng)實(shí)時(shí)跟蹤文件變化,這些方法幫助系統(tǒng)管理員更有效地監(jiān)控和分析日志文件,需要的朋友可以參考下
    2025-02-02

最新評論

西吉县| 德清县| 镇平县| 大庆市| 禄丰县| 罗平县| 修武县| 翼城县| 墨脱县| 敦化市| 游戏| 雷山县| 六安市| 淮安市| 越西县| 商南县| 双辽市| 齐齐哈尔市| 岫岩| 开鲁县| 余江县| 潢川县| 八宿县| 保德县| 二连浩特市| 镇雄县| 英吉沙县| 安龙县| 镇坪县| 山阳县| 盱眙县| 双柏县| 河南省| 铜陵市| 都江堰市| 东安县| 黎川县| 阿拉善盟| 凤山市| 惠来县| 呼玛县|